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。

推薦閱讀: