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