好多时候,我们都想在过滤器里面获取到spring的容器,从而可以拿到spring容器里面的一些bean。但要认识到一点,过滤器里面是否可以直接拿到,tomcat容器启动的时候,首先加载context-param的配置文件,也就是spring容器。然后加载监听器,再加载过滤器。所以过滤器肯定可以拿到spring的容器。
WebApplicationContext代表着spring容器,而且它是以WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE 为键,存放在ServletContext里面的,所以我们可以使用
WebApplicationContext wac = (WebApplicationContext)servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
获得spring容器,但是这样很麻烦,好多人并不知道它的键是什么。所以我们可以使用工具类实现:
这个工具类在org.springframework.web.context.support包中。
WebApplicationContext wac =WebApplicationContextUti
当 ServletContext 属性列表中不存在 WebApplicationContext 时,getWebApplicationContext
写个实例吧:
public void init(FilterConfig conf) throws ServletException {
ServletContext servletContext = conf.getServletContext();
WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(servletContext);
this.configHelper = (ConfigHelper) wac.getBean("configHelper");
this.authService = (IAuthService) wac.getBean("authService");
this.userValidateService = (IUserValidateService) wac.getBean("userValidateService");
this.stringTemplateMerger = (StringTemplateMerger) wac.getBean("stringTemplateMerger");
this.userTenantDao = (IUserTenantDao) wac.getBean("userTenantDao");
}