1. 程式人生 > >Spring @Aspect 全註解的AOP測試問題

Spring @Aspect 全註解的AOP測試問題

遇到問題如下:

測試切面方法,沒有任何錯誤提示,綠色通過,但始終前置通知和後置通知的列印沒起效果,idea顯示方法關聯到切面了,dubug卻並沒有走切面。

分析:

1、@Aspect註解標示的類沒有起作用,,檢查前置和後置括弧內的指示器(execution)語法配置,沒有錯誤

2、試用junit測試載入xml的做法,bean和註解開啟功能都是在xml中進行配置,測試通過

3、思考註解和xml配置的差異,最終發現我配置了切面,但是切面對應的pojo沒有宣告@Component,即切面的pojo沒有讓spring給建立bean,在切面Aspect 上新增@Component註解後,測試通過。

再回顧一下AOP的實質:

定義一個通用的功能,通過宣告的方式定義這個功能在何處使用,而無需修改受影響的類,讓程式碼之間更少耦合。

將切面類宣告為spring的bean之後,就能通過的原因:

AspectJ切面根本不需要spring就能織入應用中, 為了使用Spring的依賴注入,對AspectJ切面注入協作者,就需要在Spring的配置中將切面宣告的同時並宣告為bean;

不管是註解還是xml配置,AspectJ自動代理都會為註解@Aspect的bean建立一個代理,這個代理會包含所有該切面的切點所匹配的bean,並在目標方法執行的前後呼叫通知方法,執行額外的邏輯;