我正在尋找一種方法來掛鉤Java方法。 我讀了約MethodInterceptor
,但我搞砸了試圖使用它,我不知道這是我在找什麼。我想截取java.lang.System
的函數,而不是從加載的jar中截取函數。有沒有辦法掛鉤Java方法?
基本上我需要一些簡單的鉤子,就像win32api樣式(將呼叫重定向到我的代碼然後跳回到原始功能)。
這可能嗎?
我正在尋找一種方法來掛鉤Java方法。 我讀了約MethodInterceptor
,但我搞砸了試圖使用它,我不知道這是我在找什麼。我想截取java.lang.System
的函數,而不是從加載的jar中截取函數。有沒有辦法掛鉤Java方法?
基本上我需要一些簡單的鉤子,就像win32api樣式(將呼叫重定向到我的代碼然後跳回到原始功能)。
這可能嗎?
我認爲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();
}
}
是否有方法在win32樣式中鉤住方法,將呼叫重定向到我的代碼,然後返回到原始代碼? – stylo
爲什麼?你的*真實*問題是什麼? – 2015-05-04 12:15:58
我在執行它們之前需要鉤住幾個方法並檢查它們的參數 – stylo
爲什麼?你有沒有考慮使用AOP? – 2015-05-04 12:19:31