2015-05-04 166 views
0

我正在尋找一種方法來掛鉤Java方法。 我讀了約MethodInterceptor,但我搞砸了試圖使用它,我不知道這是我在找什麼。我想截取java.lang.System的函數,而不是從加載的jar中截取函數。有沒有辦法掛鉤Java方法?

基本上我需要一些簡單的鉤子,就像win32api樣式(將呼叫重定向到我的代碼然後跳回到原始功能)。

這可能嗎?

+1

爲什麼?你的*真實*問題是什麼? – 2015-05-04 12:15:58

+0

我在執行它們之前需要鉤住幾個方法並檢查它們的參數 – stylo

+0

爲什麼?你有沒有考慮使用AOP? – 2015-05-04 12:19:31

回答

0

我認爲AOP可能是你的問題的答案。

看看Aspect Oriented Programming with Spring。在執行它們之前,您可能想使用「around建議」來檢查特定方法的參數。

如:

import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Around; 
import org.aspectj.lang.ProceedingJoinPoint; 

@Aspect 
public class AroundExample { 

    @Around("com.xyz.myapp.SystemArchitecture.businessService()") 
    public Object doParamChecking(ProceedingJoinPoint pjp, SomeType someArg, ...) throws Throwable { 
     if (checkParamOK(someArg, ...)) { 
      return pjp.proceed(); 
     } 
     return SomethingOtherwise(); 
    } 

} 
+0

是否有方法在win32樣式中鉤住方法,將呼叫重定向到我的代碼,然後返回到原始代碼? – stylo

0

您可以AoP嘗試。使用AoP,可以在方法調用之前,之後和周圍執行操作。您可以檢查面向方面編程的AspectJ

This aspectj doc提供了AspectJ編程的一瞥。

相關問題