有没有办法挂钩Java方法?
问题描述:
我正在寻找一种方法来挂钩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();
}
}
+0
是否有方法在win32样式中钩住方法,将呼叫重定向到我的代码,然后返回到原始代码? – stylo
为什么?你的*真实*问题是什么? – 2015-05-04 12:15:58
我在执行它们之前需要钩住几个方法并检查它们的参数 – stylo
为什么?你有没有考虑使用AOP? – 2015-05-04 12:19:31