這裏我以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容器,讓切面類加載完後再注入