spring Filter中注入bean

遇到朋友在filter中用@autowired注入,得到的对象是null,于是根据自己项目中的使用,提供了下列解决方法。
1.web.xml中配置

<listener>
   <listener-class>
      org.springframework.web.context.ContextLoaderListener
   </listener-class>
</listener>
<filter>
   <filter-name>AuthFilter</filter-name>
   <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
   <filter-name>AuthFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

2.spring bean中配置:

<bean id="AuthFilter" class="**.**.***.******.filter.AuthFilter">
   <property name="authService" ref="authService"></property>
</bean>

3.实现类

这里写图片描述

ps. 简单描述一下:
java web项目启动加载顺序为:
context-param -> listener -> filter -> servlet
项目启动时,先初始化listener,然后是filter的初始化,最后才是servlet的初始化(这和web.xml配置文件中他们所对应的先后顺序无关,但针对于某类配置而言,与他们出现的顺序是有关的),因此,当我们在filter里使用注解注入一个bean时,就会注入失败,因为filter在初始化的时候,注解的bean还没有被初始化,所以会出现注入对象为null的情况。

解决办法应该有多种,针对上述解决办法,filter加入org.springframework.web.filter.DelegatingFilterProxy类,DelegatingFilterProxy类是一个代理类,所有的请求都会首先发给这个代理,然后再按照“filter-name”委派到spring中的这个bean,因此要Spring中配置的bean的name和web.xml中的一样.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值