其实Spring中,web应用启动的顺序是:listener->filter->servlet,先初始化listener,然后再来就filter的初始化,再接着才到我们的dispathServlet的初始化,因此,当我们需要在filter里注入一个注解的bean时,就会注入失败,因为filter初始化时,注解的bean还没初始化,没法注入。
public class AuthenticationTokenFilter implements Filter {
private JedisUtil.Strings jedisStrings;
@Override
public void init(FilterConfig fConfig) throws ServletException {
ServletContext sc = fConfig.getServletContext();
XmlWebApplicationContext cxt = (XmlWebApplicationContext)
WebApplicationContextUtils.getWebApplicationContext(sc);
if (cxt != null && cxt.getBean("jedisStrings") != null && jedisStrings == null)
jedisStrings = (JedisUtil.Strings) cxt.getBean("jedisStrings");
}
...
...
}

探讨了Spring框架中Web应用的启动顺序,即listener、filter、servlet的初始化流程,解析了为何在filter中注入bean会失败的问题,并提供了解决方案。
870

被折叠的 条评论
为什么被折叠?



