ApplicationContext?SpringBoot中静态方法如何引用非静态对象?

       最近在项目开发中遇到了一个问题:在SpringBoot项目中静态方法的上下文如何引用非静态的对象?

       先来说项目中的需求:项目中要开发一个工具类用于调用远端网关的Http接口,

在调用网关接口之前需要先获取一个Token令牌(我们项目中获取Token令牌的方式是由进程去请求、检查、更新令牌,然后将有效的令牌存在Redis缓存中)。成功的获取到Token之后再拿着有效的Token去请求远端的网关Http接口。而问题就出在了我如何成功的从Redis中获取Token。

       作为SpringBoot项目去获取Redis中的内容,最先想到的肯定就是采用@Autowired注解引入StringRedisTemplate类,然后调用redisTemplate.opsForValue().get(“Redis缓存的key”)方法。

       但是我是一个调用Http接口的工具类里边的静态方法,按照Java的特性静态方法不能引用非静态对象和变量,这时候有人可能想到了用下图的方式引入StringRedisTemplate

      但是很遗憾的告诉你,由于Java类加载的特性,这样引用的对象并不会被Spring的Bean容器管理。那么我们到底该怎么解决呢?

      网上查询,提到了一个关键点 接口:ApplicationContext 再去翻源码,最终找到了本公司自己内部封装的一个类:SpringBootContextHelper(公司内部的代码不方便展示),采用这种方式即可从Spring的Bean容器中获取到StringRedisTemplate对象,方法如下:

SpringBootContextHelper.getApplicationContext().getBean(StringRedisTemplate.class);

扩展:

       对于另一种获取ApplicationContext的方式。我们可以采用以下方式,并对获取方式进行一个小小的封装,封成一个工具类,如下:

此时在代码中的使用即变为:

运行结果:成功的获取到StringRedisTemplate对象

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值