有没有办法挂钩Java方法?

问题描述:

我正在寻找一种方法来挂钩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

我认为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

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

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