当前位置:   article > 正文

静态方法(工具类)中调用Spring管理的Bean_spring 静态方法中引用bean

spring 静态方法中引用bean

场景:

  • 封装工具类,方便业务处理
  • 工具类中需要调用 spring管理的Bean
  • 测试调用报空指针异常问题

初步工具类代码:

  1. @Component
  2. public class ScriptExecuteContent {
  3. @Autowired
  4. private static SignRepository signRepository;
  5. public static String checkSign(String certNo, String acctNo, String instCode) {
  6. Sign sign = signRepository.findByCertNoAndAcctNoAndInstCode(certNo, acctNo, instCode);
  7. if (null != sign
  8. && StringUtils.equals(sign.getStatus(), StatusEnum.SUCCESS.code())
  9. && DateUtil.getCurrentDate().before(sign.getExpireTime())) {
  10. return "1";
  11. } else {
  12. return "0";
  13. }
  14. }
  15. }

该段代码晃眼一看没啥问题,但是运行就会null异常,因为此处注入的signRepository为null,这是因为静态方法是属于类的,普通方法才属于对象,spring注入是在容器中实例化变量的,并且静态是优先于对象存在的,所以直接在静态方法中调用注入的静态变量其实是为null的。

思考: 

Spring Bean的生命周期:

实例化和属性赋值对应构造方法和setter方法的注入,初始化和销毁是用户能自定义扩展的两个阶段

  • 实例化 Instantiation
  • 属性赋值 Populate
  • 初始化 Initialization
  • 销毁 Destruction

初始化阶段Initialization  ==>  Bean 对象改造的4中方法:

销毁 Destruction阶段调用时机:

  • 单实例:容器关闭的时候
  • 多实例:容器不会管理这个Bean,不会调用它的销毁方法
     

解决方案一:(待验证  先用方案二
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/798431

推荐阅读
相关标签