spring使用aspect註解切面不起作用的排查過程及解決
今天做spring使用aspect註解demo,發現不起作用,問題排查如下:
1.程序正常啟動,說明jar包依賴沒有問題
2.debug程序不進入切面,有可能是路徑問題,根據這個思路,果真是路徑問題,在切面配置類的使用@ComponentScan的路徑寫錯瞭。
掃描的路徑為:註解類、切面類及service的上一層目錄即可,假設項目的結構如下:
則@ComponenScan(“demo.com.nrt”)即可
SpringBoot切面@aspect— 註解在嵌套方法不生效的問題
例如在service中方法如下
@PermissionAop @Override public List<PoiPermission> getList() { List<PoiPermission> list = this.list(); return list; } @Override public void test(){ this.getList(); System.out.println(""); }
controller中調用test()方法,test方法中調用切面方法,切面不生效,無法進入切面。
使用如下方式可解決該問題(啟動類上需要添加
@EnableAspectJAutoProxy(exposeProxy = true))
@PermissionAop @Override public List<PoiPermission> getList() { List<PoiPermission> list = this.list(); return list; } @Override public void test(){ IPoiPermissionService service = (IPoiPermissionService) AopContext.currentProxy(); service.getList(); System.out.println(""); }
其中IPoiPermissionService為該service類實現的接口。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- SpringBoot中創建的AOP不生效的原因及解決
- 老生常談spring的事務傳播機制
- 解決spring AOP中自身方法調用無法應用代理的問題
- 解決Spring AOP 同類調用失效問題
- SpringBoot使用Async註解失效原因分析及解決(spring異步回調)