Filter使用@Autowired失敗爲null

可使用如下方式進行注入

   public class ControllerFilter implements Filter {
    	@Autowired
    	private LogsPutDataBase logsPutDataBase;
    	@Override
    	public void init(FilterConfig arg0) throws ServletException {
    		ServletContext servletContext = arg0.getServletContext();
    		ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
    		logsPutDataBase = (LogsPutDataBase)ctx.getBean("logsPutDataBase");
    	}
		
		public void destroy () {
		}
		
		public void doFilter(ServletRequest arg0, ServletResponse arg1,  
            FilterChain arg2){
			......
			return;
		}
}

原因:

在Spring中,web應用啓動的順序是:listener->filter->servlet,先初始化listener,然後再來就filter的初始化,再接着纔到我們的dispathServlet的初始化,因此,當我們需要在filter裏注入一個註解的bean時,就會注入失敗,因爲filter初始化時,註解的bean還沒初始化,沒法注入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章