springboot通过java -jar运行实现ApplicationContextAware接口报空指针NUllPointerException

  • 内容
  • 评论
  • 相关

先描述背景:
自定义了一个实现ApplicationContextAware的自定义类,之前测试都是用IDE的run as application方式启动项目,没有错误。
后来打包成jar文件通过java -jar运行即报空指针异常

Caused by: java.lang.NullPointerException: null
at com.ceair.b2t.messagecenter.SpringContextUtil.getBean(SpringContextUtil.java:41) ~[classes!/:na]

直接原因是applicationContext为空,即没有注入

背后的原因是实现ApplicationContextAware的自定义类和使用applicationContext的类加载顺序问题。
一定要把定义的ApplicationContextAware工具类加载顺序放到调用类的前面
解决方案就是在调用类上添加注解

该注解用于声明当前bean依赖于另外一个bean。所依赖的bean会被容器确保在当前bean实例化之前被实例化。

题外话:
这样看来两种run项目方式至少在类加载顺序上是有区别的