解决自定义Shiro.Realm扩展类不能用注解(@Resource或@Autowire)自动装配的问题

在自定义realm的时候注入的时候就会报错,去掉注解@Autowired 运行就会没有问题。错误的原因应该在于注解无法注入

/**
 * 
 * 项目名称:飓风保险系统
 * <p>
 * 功能模块名称:
 * <p>
 * 文件名称为:InsuranceShiroRealm.java
 * <p>
 * 文件功能简述:
 * <p>
 * 项目研发:张建明
 * <p>
 * 修改记录:
 * <p>
 * 修改人  修改日期  备注
 * 
 * @version v1.0
 * @copyright Jufengad.com
 */
@Service
public class InsuranceShiroRealm  extends AuthorizingRealm{
	private WriteLog logService;
	@Resource(name="simpleDtoFactory")
	private DtoFactory simpleDtoFactory;
解决方案: 
因为shiro的realm属于Filter,简单说就是初始化realm时, spring 还未加载相关业务Bean,那么解决办法就是将springmvc的配置文件加载提前。
所以将SpringMVC的配置文件在 <context-param>中加载。
<?xml version="1.0" encoding= "UTF-8"?> 
<web-app xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
	xmlns= "http://java.sun.com/xml/ns/javaee"
	xmlns:web= "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id= "WebApp_ID"
	version ="3.0"
>
  <display-name>insurance-web</display-name>
  <context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>webapp.web.root</param-value>
  </context-param>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/*.xml,classpath:insurance-web-servlet.xml</param-value>
  </context-param>
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>



猜你喜欢

转载自blog.csdn.net/zhangjianming2018/article/details/80706158