1

是否可以在不使用任何 AOP 框架(如 AspectJ、Spring AOP、Guice 等)的情况下拦截使用自定义注释进行注释的方法的执行...我很想知道是否有任何默认的 java api 可以用于此目的(例如反射)。

谢谢。

4

3 回答 3

1

您不能直接拦截现有方法的方法调用,而无需连接到例如实例化逻辑。一种方法是将实例化逻辑分离到可以使用例如Proxy的工厂中。

public class FooFactry() {
     private InvocationHandler handler;

     public FooFactory(InvocationHandler handler) {
         this.handler = handler;
     }

     public Foo newInstance() {
        return (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
                              new Class[] { Foo.class },
                              handler);
     }
}

您可以使用自定义InvocationHandler来拦截在Foo. 您还可以创建自己的包装器来避免动态代理,class FooWrapper extends Foo{}以达到相同的结果。

于 2011-09-23T12:26:00.423 回答
0

它不能使用反射来完成,因为它不提供对执行的任何控制。但是你可以写你自己的代理。您将需要检测类,这可能会更容易使用BCEL之类的东西。它与 Java 框架和犹太洁食非常相关。

于 2011-09-23T12:22:45.090 回答
0

您可以使用反射来调用方法,但不能使用它来拦截方法调用。同样,您可以使用该类创建具有动态调用处理程序的代理Proxy,但您不能拦截不针对代理的现有代码。

所以答案是否定的。

于 2011-09-23T12:23:01.283 回答