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

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

java 复制代码
****省略import包****
public class CommonUtils {
    @Autowired
    private 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的值了。

相关推荐
lUie INGA1 小时前
在2023idea中如何创建SpringBoot
java·spring boot·后端
小糖学代码1 小时前
LLM系列:1.python入门:15.JSON 数据处理与操作
开发语言·python·json·aigc
handler011 小时前
从源码到二进制:深度拆解 Linux 下 C 程序的编译与链接全流程
linux·c语言·开发语言·c++·笔记·学习
geBR OTTE2 小时前
SpringBoot中整合ONLYOFFICE在线编辑
java·spring boot·后端
Porunarufu2 小时前
博客系统UI自动化测试报告
java
小白学大数据2 小时前
现代Python爬虫开发范式:基于Asyncio的高可用架构实战
开发语言·爬虫·python·架构
渔舟小调2 小时前
P19 | 前端加密通信层 pikachuNetwork.js 完整实现
开发语言·前端·javascript
不爱吃炸鸡柳2 小时前
数据结构精讲:树 → 二叉树 → 堆 从入门到实战
开发语言·数据结构
网络安全许木2 小时前
自学渗透测试第21天(基础命令复盘与DVWA熟悉)
开发语言·网络安全·渗透测试·php
t***5442 小时前
如何在Dev-C++中使用Clang编译器
开发语言·c++