话不多说,上错误代码,以下是我在静态方法里使用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的值了。