1. 程式人生 > >解決自定義Shiro.Realm擴充套件類不能用註解(@Resource或@Autowire)自動裝配的問題

解決自定義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>