Java自定义工具类中使用RedisTemplate的遇到空指针问题

embedded/2024/9/22 11:01:28/

话不多说,上错误代码,以下是我在静态方法里使用RedisTemplate类,这里加了@Autowired

java">****省略import包****
@Component
public class CommonUtils {@Autowiredprivate static RedisTemplate redisTemplate;public static String test() {String info = "";try {//读取Redis中key为info的值info =  (String) redisTemplate.opsForValue().get("info");} catch (Exception e) {e.printStackTrace();}return info;}
}

结果报了空指针错误:java.lang.NullPointerException....

因为我们使用RedisTemplate需要使用注入的方式,但是静态属性static又不支持注入。

解决方式:

方法1:给静态RedistTemplate添加set方法并使用@Autowired注解

java">private static RedisTemplate redisTemplate;
@Autowired
public void setRedisTemplate(RedisTemplate redisTemplate){CommonUtils.redisTemplate = redisTemplate;
}

方式2:注入redisTemplate(被spring管理的类),定义一个在static用的redisTemplate,然后用@PostConstruct注解将自动注入的redisTemplate赋值给staticRedisTemplate

java">@Autowired
private RedisTemplate redisTemplate;
private static RedisTemplate staticRedisTemplate;
@PostConstruct
public void init(){staticRedisTemplate = this.redisTemplate;
}

然后可以正确使用redisTemplate获取到info的值了。

还有一个注意的要点:接着需要将该工具类作为一个spring管理的bean,工具类上添加注解 @Component,这个必须,不然无法注入成功。


http://www.ppmy.cn/embedded/24886.html

相关文章

Java基础知识总结(80)

CLH释放锁的过程 线程A执行完临界区代码后开始unlock(释放)操作,设置nodeA的前驱引用为null(方便垃圾回收器回收),锁状态locked为false。 线程B执行抢到锁并且完成临界区代码的执行后,开始unlock(释放&am…

网络安全(黑客)—-2024自学手册

一、什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性…

Vue笔记 4

内置指令 1.v-text_指令 我们学过的指令: ​ v-bind : 单向绑定解析表达式, 可简写为 :xxx ​ v-model : 双向数据绑定 ​ v-for : 遍历数组/对象/字符串 ​ v-on : 绑定事件监听, 可简写为 ​ v-if : 条件渲染(动态控制节点是否存存在&#xff0…

软件需求管理过程性规程指导文件(Word原件)

在软件开发的生命周期中,需求沟通与分析是一个至关重要的环节。很多项目失败的原因都可以归结为需求理解不透彻或者需求变更控制不当。因此,加强需求调研和软件需求分析的质量,是确保软件项目成功的关键。 软件全套精华资料包清单部分文件列表…

富格林:利用正规技能规避黑幕欺诈

富格林悉知,尽管现在现货黄金市场存在较大的盈利潜力,但也不是随随便便的操作就可以带来收益的,关键在投资者是否掌握合理正规的操作技能,并且是否具备戒备黑幕欺诈防备风险的能力,如果不小心落入黑幕欺诈陷阱中&#…

未来Agent AI智能体的角色与挑战

目录 前言1 技术进步与创新1.1 自我优化与知识积累1.2 应用领域与潜力1.3 决策透明性与可解释性挑战及其解决方案 2 伦理与法律规范2.1 隐私与数据处理2.2 决策与道德抉择2.3 法律规范与监管机制 3 经济与就业市场3.1 生产力与效率提升3.2 就业岗位变化与挑战3.3 智能体时代的的…

数据准备——词元化(分词)

词元化(分词) BPE 分词WordPiece 分词Unigram 分词分词器的选用词元化(Tokenization)是数据预处理中的一个关键步骤,旨在将原始文本分割成模型可识别和建模的词元序列,作为大语言模型的输入数据。传统自然语言处理研究(如基于条件随机场的序列标注)主要使用基于词汇的分…

MogDB如何兼容Oracle的管道函数

在之前很多数据库国产化改造项目中,我们遇到了很多难题,其中一个难点在于重度使用Oracle的一些用户使用了大量的管道函数(pipeline)。在之前的版本中,由于MogDB还不支持pipeline,因此给我们造成了不小的麻烦…