JAVA工具类中的静态变量使用Spring容器中的Bean

有很多小伙伴在创建工具类的时候有可能会用到Spring容器中的某些类,但是在工具类中却是静态变量,那么如何把Spring容器中的bean注入到工具类中呢?

我们知道,jvm在加载某个类的时候,ClassLoader#loadClass方法不会初始化该类(更不会实例化该类),而@Autowared注解是通过构造方法或set方法注入的,该被加载的类并没有实例化也就不会执行构造方法或者set方法,所以也就不可能为静态变量绑定值,这时再使用这个变量就会出现空指针了。

思路一: 既然类加载的时候没有实例化对象,那么我们把工具类交给Spring容器管理,让Spring容器帮我们创建对象,并通过set方法给静态变量赋值。这里要注意set方法不能使用static修饰了。
在这里插入图片描述
当然也可以通过构造方法注入,总之原理一样,就是交给Spring容器管理,实例化对象,在实例化对象的时候将Spring中的bean注入进去。

思路二: 如果不想实例化对象,或者工具类的包没有被Spring扫描无法使用注解等,此时我们可以通过其他能获取Spring容器bean的工具类为你的工具类赋值,可以找找你的项目中有没有实现ApplicationContextAware接口的Spring工具类,通过Spring工具类获取bean,然后直接赋值即可。

在这里插入图片描述

在这里插入图片描述
当然也不是必须要实现ApplicationContextAware接口,不同的项目可能会实现Spring生命周期中的其他接口,其他部分接口也会提供Spring上下文对象的,找到这个上下文对象即可。

两种方法各有优劣,总体来说第二种使用更优雅,不用实例化对象,在开发中根据实际情况选择吧!

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值