可使用如下方式進行注入
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還沒初始化,沒法注入。