本文介紹了反射+AOP-通過Invoke調用方法時未截獲通知的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
通過反射:
Class c = Class.forName("mypackage.DiodeService");
Method m = c.getDeclaredMethod("blink");
Object t = c.newInstance();
Object o = m.invoke(t);
調用DiodeService中的方法:
@ValueGreaterThan
public void blink(){
log.info("Diode service: blink()");
}
在注釋@ValueGreaterThan為偵聽方面:
@Around(value = "mypackage.CommonJoinPointConfig.valueGreaterThanAspect())") public void around(ProceedingJoinPoint joinPoint) throws Throwable {
log.info("Value greater than aspect {}", joinPoint); }
BUT:當通過”Invoke”調用方法時,從不截取周圍的通知。
當diodeService.blink()
調用時,正常截取周圍的建議
請注意,有什么想法嗎?
推薦答案
Spring AOP基于運行時編織,這是因為基于代理的性質。這意味著目標Bean是一個由Spring管理的Bean。在Spring運行時,該Bean被轉換為代理。
如果DiodeService
是Spring代理(由Spring管理),則Spring AOP將正常工作,即對blink
的任何調用都將截獲通知。
如果DiodeService
直接實例化而不是通過Spring實例化,blink
周圍的通知將永遠不會被截取。這是通過調用newInstance
,
來實例化DiodeService
時的情況
Object t = c.newInstance()
這篇關于反射+AOP-通過Invoke調用方法時未截獲通知的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,