在使用過濾器的時(shí)候,一般我們都是在filter標(biāo)簽中配置 過濾器的 。
但是,當(dāng)需要在過濾器中注入Bean的時(shí)候,用這種配置方法,需要注入的對(duì)象就是一個(gè)null。
這里有個(gè)要注意的地方。filter的類中,需要注入的對(duì)象要自己set下,如果用注解的 話,會(huì)失敗,大概是因?yàn)閤ml優(yōu)先的原因吧。
所以這邊我們需要用另外一種配置的方法。如下:
web.xml中
<filter>
<filter-name>DelegatingFilterProxy</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetBeanName</param-name>
<param-value>currentUserFilter</param-value><!-- 過濾器在spring中注冊的id -->
</init-param>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
applicationContext.xml配置:
<!-- 配置過濾器 -->
<bean id="currentUserFilter" class="com.onepay.filter.CurrentUserFilter">
</bean>
最后的filter類
public class CurrentUserFilter implements Filter {
@Resource
private UserService userService;
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
System.out.println("filter:"+userService);
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
@Override
public void destroy() {
}
}