在Filter跟Listener中使用Spring获得bean

在Filter和Listener中使用Spring获得bean

Filter注入

方式1:

在Filter的init方法中获得WebApplicationContext并调用getBean(String)方法.

这里的知识点就是如何在ServletContext中获得Spring的ApplicationContext:

public void init(FilterConfig filterConfig) throws ServletException {
	ServletContext sc = filterConfig.getServletContext();
	WebApplicationContext wac = (WebApplicationContext) sc.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
	//获得WebApplicationContext还可以调用
	//WebApplicationContextUtils.getWebApplicationContext(sc);
	//当然最后Spring都是调用getAttribute方法.
	this.myManager = (MyManager) wac.getBean("myManager");
}

方式2:

使用Spring的Filter代理类org.springframework.web.filter.DelegatingFilterProxy来实现.

然后在Spring的xml配置文件里将属性注入.

首先在web.xml里面配置Filter

<filter>
	<filter-name>MySpringFilter</filter-name>
	<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
	<init-param>
		<param-name>targetBeanName</param-name>
		<param-value>myFilter</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>MySpringFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

userFilter则是我们自己的Filter在Spring中bean的name.

然后在Spring的xml配置文件中配置:

<bean id="myFilter" class="filter.MyFilter">
	<property name="myManager" ref="myManagerInSpring"></property>
</bean> 

Listener注入

原本想实现ApplicationContextAware接口,但是现在有些东西还需要测试.目前的方案是想办法获得ServletContext.如果谁知道如何用Spring自动管理Listener请吼我.