繁体   English   中英

在没有AOP的情况下拦截带注释的方法调用

[英]Intercepting annotated method calls without AOP

是否可以在不使用任何AOP框架(例如AspectJ,Spring AOP,Guice等)的情况下拦截使用自定义注释注释的方法的执行...我很好奇是否可以找到任何默认的Java api可以用于此目的(例如反射)。

谢谢。

您不能直接拦截现有方法的方法调用,而无需使用实例化逻辑。 一种方法是将实例化逻辑分离为可以使用例如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{}以实现相同的结果。

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

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

所以答案是否定的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM