本文主要是介绍Java自定义工具类中使用RedisTemplate的遇到空指针问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
话不多说,上错误代码,以下是我在静态方法里使用RedisTemplate类,这里加了@Autowired
****省略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注解
private static RedisTemplate redisTemplate;
@Autowired
public void setRedisTemplate(RedisTemplate redisTemplate){CommonUtils.redisTemplate = redisTemplate;
}
方式2:注入redisTemplate(被spring管理的类),定义一个在static用的redisTemplate,然后用@PostConstruct注解将自动注入的redisTemplate赋值给staticRedisTemplate
@Autowired
private RedisTemplate redisTemplate;
private static RedisTemplate staticRedisTemplate;
@PostConstruct
public void init(){staticRedisTemplate = this.redisTemplate;
}
然后可以正确使用redisTemplate获取到info的值了。
还有一个注意的要点:接着需要将该工具类作为一个spring管理的bean,工具类上添加注解 @Component,这个必须,不然无法注入成功。
这篇关于Java自定义工具类中使用RedisTemplate的遇到空指针问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!