有没有办法挂钩java方法?

时间:2015-05-04 12:12:30

标签: java hook interceptor

我正在寻找一种挂钩Java方法的方法。 我读到了MethodInterceptor,但我搞砸了试图使用它而且我不知道这是不是我正在寻找的东西。我想拦截来自java.lang.System的函数,而不是来自加载的jar。

基本上我需要一些简单的挂钩,就像win32api样式一样(将调用重定向到我的代码然后跳回原来的函数)。

这可能吗?

2 个答案:

答案 0 :(得分:0)

我认为AOP可能是你问题的答案。

看看Aspect Oriented Programming with Spring。在执行特定方法之前,您可能希望使用“around advice”来检查特定方法的参数。

如:

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();
    }

}

答案 1 :(得分:0)

您可以尝试使用AoP。使用AoP,可以在方法调用之前,之后和周围执行操作。您可以检查AspectJ是否面向方面编程。

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