关于工具类中@Autowired注入为NULL的问题记录

本文探讨在Spring框架中,使用@Component和@Autowired注解时遇到的服务注入失败问题,特别是在静态方法调用注入服务的情况。文章详细解释了如何利用@PostConstruct注解确保在静态方法调用前完成依赖注入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

记录:在实体类中加入@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");
             }
        }    

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

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

 

参考

转载于:https://www.cnblogs.com/sueyyyy/p/9841857.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值