zoukankan      html  css  js  c++  java
  • SpringBoot--过滤器注入bean的空指针问题

      在过滤器中的doFilterInternal写业务代码时,需要用到spring bean组件,发现在过滤器中无法初始化bean组件,均为NullPointerException,经检查 扫描包路径没问题。最终确定容器加载顺序引发的问题。在web.xml中各个元素的执行顺序是这样的,context-param-->listener-->filter-->servlet  可以看出在Spring MVC 的dispatcherservlet初始化之前过滤器就已经加载好了,所以注入的是null。

      红箭头标注的均为null对象

      解决思路是doFilterInternal使用spring上下文取获取相应的bean组件,对于Spring Boot我们可以使用一下步骤来解决

      第一步:创建上下文工具类SpringContextUtil

     1 import org.springframework.context.ApplicationContext;
     2 
     3 public class SpringContextUtil {
     4     
     5     private static ApplicationContext applicationContext;
     6  
     7     //获取上下文
     8     public static ApplicationContext getApplicationContext() {
     9         return applicationContext;
    10     }
    11  
    12     //设置上下文
    13     public static void setApplicationContext(ApplicationContext applicationContext) {
    14         SpringContextUtil.applicationContext = applicationContext;
    15     }
    16  
    17     //通过名字获取上下文中的bean
    18     public static Object getBean(String name){
    19         return applicationContext.getBean(name);
    20     }
    21     
    22     //通过类型获取上下文中的bean
    23     public static Object getBean(Class<?> requiredType){
    24         return applicationContext.getBean(requiredType);
    25     }
    26  
    27 }

      第二步:在Springboot启动类的main方法中,向上下文工具类SpringContextUtil中注入applicationContext

    1     public static void main(String[] args) throws InterruptedException {
    2         ApplicationContext context = SpringApplication.run(Application.class, args);
    3         SpringContextUtil.setApplicationContext(context);
    4     }

      第三步:在相应的业务代码中 使用SpringContextUtil.getBean("xxx") 获取相应的bean组件即可,如:

    1         JwtUtil jwtUtil = (JwtUtil) SpringContextUtil.getBean("jwtUtil");
    2         UserLogMapper userLogMapper = (UserLogMapper) SpringContextUtil.getBean("userLogMapper");
    3         JedisServer jedisServer = (JedisServer) SpringContextUtil.getBean("jedisServerImpl");

      经检查:空指针问题解决。

  • 相关阅读:
    做足以让自己骄傲的活
    Count(*) 与 count(field) 一样吗?
    Explain Plan试分析
    Oracle SQL Developer中查看解释计划Explain Plan的两种方法
    整理+学习《骆昊-Java面试题全集(上)》
    【转】Java就业指导
    如何清晰的、高质量的给面试官介绍自己的电商项目【借鉴】
    留存的图片
    Linux学习_006_JavaEE程序员常用linux命令整理
    给Linux初学者的七个建议,值得一读
  • 原文地址:https://www.cnblogs.com/tjqBlog/p/9401129.html
Copyright © 2011-2022 走看看