是否可以在不使用任何 AOP 框架(如 AspectJ、Spring AOP、Guice 等)的情况下拦截使用自定义注释进行注释的方法的执行...我很想知道是否有任何默认的 java api 可以用于此目的(例如反射)。
谢谢。
是否可以在不使用任何 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{}
以达到相同的结果。
您可以使用反射来调用方法,但不能使用它来拦截方法调用。同样,您可以使用该类创建具有动态调用处理程序的代理Proxy
,但您不能拦截不针对代理的现有代码。
所以答案是否定的。