[转]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