Spring使用自定義切面(aop)方法時不生效

這裏我以shiro+springboot的一個例子爲例,理解爲主即可

1.先了解怎麼做到spring切面編程(aop)

1).製作切面類

2).在userServiceimpl加入切面註解

 

2.確定在那裏使用到被切對象

    1).shiro中使用到userService

    2.)在 controller使用到

注意其中config(springboot的啓動類)對象中加載shiro對象 

 

 

執行:

controller訪問的時候發現無法觸發切面方法

解決:

這是因爲在spring加載shiro(UserRealm類)的時候使用此時切面類還沒加載,但是在UserRealm類中又注入了UserServiceImpl類(注意:此時不是代理類,就是個普通類而已,且該類已經注入到spring容器中,不會再注入第二次了),因此在controller調用的userService方法的時候不是代理類,所以無法做到切面。

解決方法:在UserRealm對象中的UserService加上@Lazy註解,延遲注入到Spring容器,讓切面類加載完後再注入

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章