[转]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即可。

posted on 2017-12-01 12:56  吐泡泡的虾  阅读(1348)  评论(0编辑  收藏  举报