[轉]SSH項目整合Shiro @RequiresPermissions后@Autowired注解自動注入失敗


轉自Youngcoding.top

在做Spring+Struts2+Hibernate+Shiro整合時遇到問題,記錄一下。

框架環境

框架 版本
Spring 4.3.7
Struts 2.3.24
Shiro 1.2.3

問題描述

  1. Spring, Struts2, Shiro均使用注解方式。如果不加Shiro @RequiresPermissions注解,一切訪問正常。一旦加上@RequiresPermissions后,訪問/user/op_test.action報錯java.lang.NullPointerException at com.lee.action.UserAction.test(UserAction.java:38),即userService.test()這一行。Debug調試發現userService字段為null,即@Autowire注解注入失效。
  2. 檢查Shiro注解配置無誤。
  3. UserAction代碼如下:

 

 

嘗試過程

  1. 根據這篇文章的提示,給userService加入setter方法后問題還是依舊。

 

 

  1. @Autowire換為@Resource(type=xxx.class)也不行。

解決辦法

經多次摸索,有如下3種解決辦法。由於對Spring注入時各注解的作用時機不清楚,具體原理尚不明:

第一種: 將Struts2的Action配置由注解方式改為struts.xml配置

 

 

第二種:將UserAction的注解定義bean改為application.xml中定義

 

 

然后給UserServiceImpl指定id @Service("userService"):

 

 

第三種:推薦采用,保留注解方式

a. 給UserServiceImpl指定id @Service("userService");
b. 然后給UserAction中的userService字段加入setter方法。
c. 如上處理后,采用@Autowire@Resource注入userService即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM