一次springboot applicationContext.getBean(clazz)空指针


现象:

  windows本地环境启动

@Autowired
private CfgCityMapper cfgCityMapper;

public CfgCityServiceImpl() {
    //实例化时直接查询全部地市
    allCityList = SpringContext.getBean(CfgCityMapper.class).queryAllWithCfgCounty();
}

 


本地启动不会报错

打成jar启动,部署linux或者本地部署,报错NullPointException ,改成
@PostConstruct
public void init(){
    //实例化时直接查询全部地市
    allCityList = SpringContext.getBean(CfgCityMapper.class).queryAllWithCfgCounty();
}

 

还是异常,改成
@PostConstruct
public void init(){
    //实例化时直接查询全部地市
    allCityList =cfgCityMapper.queryAllWithCfgCounty();
}

 

没有错
原因:待分析
20200628
此类型错误再次出现,初步分析
1、ApplicationContext.getBean()不能在Bean的生命周期中(构造函数、BeanPostProcessor、InitializingBean均不可),
当前解决方案是在方法里定义init方法初始AppliccationContext.getBean(),设置相关属性
2、之所以在打成jar启动不行,本地启动却可以,可能是根据俩者加载的速度不同?如果在 InitializingBean 里先sleep几秒,再获取Bean,也是不会报错的
但是bean的加载顺序应该有一定的规律的才对,不会收加载速度影响吧,待分析


 
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM