Filter里面注入Service方法

来源:互联网 发布:淘宝韩国直邮鉴别真假 编辑:程序博客网 时间:2024/05/29 02:08

今天博客第一天,就只写一个昨天我解决的一个问题吧。如题述。

假如你是一位javaweb开发人员,Filter这个词是不陌生的,废话不多说,我就说我的问题和解决方法。

问题:我建立一个全局拦截器,当然,这是测试的时候建立的,我把它命名为RequestFilter,它继承了Filter,web应用启动的顺序是:listener->filter->servlet,而因为项目应用了spring mvc,所以我们会有两个配置文件(applixationContext.xml和springMVC-sevlet.xml),我们在配置spring时会用到spring的listener,它会读取application.xml里的配置对spring context进行初始化;项目启动时,先初始化listener,因此配置在applicationContext.xml里的bean会被初始化和注入;然后再来就filter的初始化,再接着才到我们的dispathServlet的初始化,因此,当我们需要在filter里注入一个注解的bean时,就会注入失败,因为filter初始化时,注解的bean还没初始化,没法注入。

那么,解决方法如下:

在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>RequestFilter</param-value>
</init-param>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DelegatingFilterProxy</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

然后在applicationContext.xml中配置一下代码:

<bean id="RequestFilter" class="com.xxx.xxx.RequestFilter">//这个是你的拦截器名字和它说在的包名+类名//这个是你在RequestFilter拦截器里面用UserSwerviceImpl定义的变量名字
    <property name="userLogServiceImpl">

        <ref bean="userLogServiceImpl"></ref>
</property>
</bean>
<bean id="userLogServiceImpl" class="com.xxxxx.xxxxxxxxx.impl.UserLogServiceImpl">

</bean>


然后在RequestFilter里面添加如代码:


private UserLogServiceImpl userLogServiceImpl;
public void setUserLogServiceImpl(UserLogServiceImpl userLogServiceImpl) {    this.userLogServiceImpl = userLogServiceImpl;}public UserLogServiceImpl getUserLogServiceImpl() {    return userLogServiceImpl;}
这样你就可以在RequestFilter里面添加@service下的bean了。


技术在于分享,希望能帮助到你!!



0 0