赞
踩
场景:
- 封装工具类,方便业务处理
- 工具类中需要调用 spring管理的Bean
- 测试调用报空指针异常问题
初步工具类代码:
@Component public class ScriptExecuteContent { @Autowired private static SignRepository signRepository; public static String checkSign(String certNo, String acctNo, String instCode) { Sign sign = signRepository.findByCertNoAndAcctNoAndInstCode(certNo, acctNo, instCode); if (null != sign && StringUtils.equals(sign.getStatus(), StatusEnum.SUCCESS.code()) && DateUtil.getCurrentDate().before(sign.getExpireTime())) { return "1"; } else { return "0"; } } }该段代码晃眼一看没啥问题,但是运行就会null异常,因为此处注入的signRepository为null,这是因为静态方法是属于类的,普通方法才属于对象,spring注入是在容器中实例化变量的,并且静态是优先于对象存在的,所以直接在静态方法中调用注入的静态变量其实是为null的。
思考:
- 还是Spring Bean的生命周期问题
- 以及加载顺序:Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)问题
Spring Bean的生命周期:
实例化和属性赋值对应构造方法和setter方法的注入,初始化和销毁是用户能自定义扩展的两个阶段
- 实例化 Instantiation
- 属性赋值 Populate
- 初始化 Initialization
- 销毁 Destruction
初始化阶段Initialization ==> Bean 对象改造的4中方法:
销毁 Destruction阶段调用时机:
- 单实例:容器关闭的时候
- 多实例:容器不会管理这个Bean,不会调用它的销毁方法
解决方案一:(待验证 先用方案二
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/798431
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。