spring boot 静态方法中想要使用注入的bean时,想当然的添加修饰符static,来修饰变量。
如下:
@Resource
private static RedisTemplate<String, Object> redis;
然而事实证明:并不可取。无法注入,注入结果为null。
应该采用以下方式:
1、将目前所在的类用@Component、@service、@controller(任选其一)注解进行标注,将此类标注成为应该bean对象。
2、新建一个同一类型的静态变量
private static RedisTemplate<String, Object> redisTemplate;
ps:redisTemplate不要注解
3、新建一个方法 方法名随意,使用@PostConstruct进行注释。
@PostConstruct
private void inint() {
redisTemplate = redis;
}
PS:@PostConstruct注解相当于Servlet中的inint()方法,会在构造器之后,inint方法之前执行。
执行顺序为:
构造器(Constructor )>>@Resource(@Autowired)>>@PostConstruct>>inint()
因此 当@Resource依赖注入完成后会自动调用被@PostConstruct所注解的方法
4、当上述步骤完成后可在静态方法中调用redisTemplate 来使用RedisTemplate<String, Object>。
@Component
public class TestClient{
@Resource
private RedisTemplate<String, Object> redis;
private static RedisTemplate<String, Code> redisTemplate;
@PostConstruct
private void inint() {
redisTemplate = redis;
}
public static Boolean Test(String key){
return redisTemplate .haskey(key);
}
}