java Filter 中注入 Service

问题:filter里面需要查询数据库,于是注入了service类,但是发现根本注入不了,报了空指针异常

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

一堆!!没毛病(相信大家在看到我这篇之前,就已经看了,但是看完了,没解决,,可以试下我的方法 O(∩_∩)O!)

一:先在Filter 添加bean;工具类:SpringUtils

  注意:此工具类必须在filter文件夹下(下图所示)

  

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * @author yqb
 * @date 2018年9月29日
 * @version 1.0
 */
@Component
public class SpringUtils implements ApplicationContextAware {
    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        if (SpringUtils.applicationContext == null) {
            SpringUtils.applicationContext = applicationContext;
        }

    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    //根据name
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }

    //根据类型
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }

    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }

}

二:在LoginFilter中添加:

@Autowired
private AdminUserService adminUserService;

  添加bean,命名可以自定

if (adminUseService == null) {
      adminUserService = (AdminUserService) SpringUtils.getBean("adminUserService");
 }

三:在 配置文件(applixationContext.xml)配置下包名

    <context:component-scan
            base-package="com.ong.controller,
            com.ong.service,
            com.ong.filter">
    </context:component-scan>

   之前配置了controller和service,,,filter于controller和service是同级包,,

   

    LoginFilter.java在包filter下,然后我们就可以调用userService中的方法了:

    JSONObject data =userService.userLogin(userName,passWord);

参考:https://blog.csdn.net/Evan_QB/article/details/82894834

         https://blog.csdn.net/chl191623691/article/details/78657638

ps:     有什么不清楚的可以评论哦。

          才疏学浅 ,请多指教 !

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值