平时开发当中,需要封装工具类,工具类中的方法大多是静态的方法,而静态方法只能调用静态成员变量。静态变量并不属于对象的属性,而是属于类的属性,而Spring则是基于对象的属性进行依赖注入的。所以用注解注入静态变量是不可行的,会一直报NullPointerException
例如 :直接注入静态的redisTemplate是不行的
@Autowired
private static RedisTemplate<Object, Object> redisTemplate;
[点击并拖拽以移动]
方法一: 在set方法上注入
@Component
public class RedisLockUtil {
private static RedisTemplate<Object, Object> redisTemplate;
@Autowired
public void setRedisTemplate(RedisTemplate<Object, Object> redisTemplate) {
RedisLockUtil.redisTemplate = redisTemplate;
}
}
方法二: 使用@PostConstruct注解
@PostConstruct用于在完成依赖项注入以执行任何初始化之后需要执行的方法
@Component
public class RedisLockUtil {
private static RedisTemplate<Object, Object> redisTemplate;
@Autowired
private RedisTemplate<Object,Object> redisTemplate_copy;
/**
* 初始化 init
*/
@PostConstruct
public void init(){
RedisLockUtil.redisTemplate=redisTemplate_copy;
}
}
或者
@Component
public class RedisLockUtil {
private static RedisLockUtil redisLockUtil;
@Autowired
private RedisTemplate<Object, Object> redisTemplate;
/**
* 初始化 init
*/
@PostConstruct
public void init(){
redisLockUtil = this;
redisLockUtil.redisTemplate = this.redisTemplate;
}
}
注: 两种方法类上@Component一定要写上
提枪策马乘胜追击04-21 20:01
代码小兵92504-17 16:07
代码小兵98804-25 13:57
杨晶珍05-11 14:54