当前位置:   article > 正文

如何在静态方法中使用自动注入的对象(SpringBoot--@PostConstruct)_通过类名调静态方法如何使用自动注入的值

通过类名调静态方法如何使用自动注入的值

转自:https://www.bbsmax.com/A/l1dyQZD6de/
正如下文写的@PostConstruct会在加载servlet的时候,执行构造函数之后执行,该类又加了@Component注解,所以在一开始启动项目的时候就会初始化一个该类的对象放入Spring的Bean工厂, 所以这里会出现一种效果就是,一启动项目这个被@PostConstruct修饰的方法就会执行了.

记录:在实体类中加入@Component注解和@Autowired注解时Service不能注入成功。

    @Component //把普通pojo实例化到spring容器中 0
         public class MyUtil{
            // 这里是需要注入的Service ①
            @Autowired
             private MyService myService;
             private static MyUtil myUtil;
             //初始化 ②
             @PostConstruct
             public void init() {
                      myUtil = this;
                      myUtil.myService = this.myService;
              }
               //调用 ③
              public static void insertParam(int id){
                      // 调用方法 ④
        myUtil.myService.testInsert("xxx");
              }
         }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

注释:0 将普通pojo实例化到容器中、如果无注解myUtil为null
① spring自动注入,如果在静态方法中调用此注入类的方法,发现注入为’null’;这里不是因为spring未注入,而是被static方法给’清空’了,在无法先于static方法初始化时可以使用@PostConstruct进行初始化。
   (注:@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。)

②使用@PostConstruct注解的方法public void init()先给该类赋值,然后通过@Autowired注入进来。这样不会影响dao等service下面调用的注入。
   ③ static方法
   ④ 调用方法 myService现在是作为myUtil的属性

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/798483
推荐阅读
相关标签
  

闽ICP备14008679号