是否有可能截獲使用自定義註釋註釋的方法的執行而不使用任何AOP框架,如AspectJ,Spring AOP,Guice等......我很想找到如果有任何默認的java apis可以用於此目的(如Reflection)。在沒有AOP的情況下截獲帶註釋的方法調用
謝謝。
是否有可能截獲使用自定義註釋註釋的方法的執行而不使用任何AOP框架,如AspectJ,Spring AOP,Guice等......我很想找到如果有任何默認的java apis可以用於此目的(如Reflection)。在沒有AOP的情況下截獲帶註釋的方法調用
謝謝。
您可以使用反射來調用方法,但不能用它來截取方法調用。同樣,您可以使用Proxy
類的動態調用處理程序創建代理,但不能攔截未針對代理的現有代碼。
所以答案是否定的。
您不能直接攔截現有方法的方法調用,而不會掛接到例如實例化邏輯。一種方法是將實例化邏輯分離成可以使用例如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{}
可以實現相同的結果。