springBoot 项目在静态工具类中注入 RedisTemplate
静态属性不能直接注入,可以通过其set方法进行注入。(注意生成的set方法需要去掉static)。
在工具类里直接注入RedisTemplate,两种方法:
(1)使用@Autowired
private static RedisTemplate redisTemplate;
@Autowired
public void setRedisTemplate(RedisTemplate redisTemplate) {
RedisUtil.redisTemplate = redisTemplate;
}
接着需要将该工具类作为一个spring管理的bean,这个必须要,不然无法注入成功。
所以加上注解 @Component
如下
@Component
public class RedisUtil {
private static RedisTemplate redisTemplate;
@Autowired
public void setRedisTemplate(RedisTemplate redisTemplate) {
JwtUtil.redisTemplate = redisTemplate;
}
}
这样就可以了。
(2)还有更简单的方法,可以直接使用 SpringContextHolder上下文来处理。推荐
注入:
import org.springframework.web.client.RestTemplate;
public class RedisUtil {
private static RestTemplate restTemplate = SpringContextHolder.getBeanByType(RestTemplate.class);
}
工具:(上下文獲取)
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext = null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextHolder.applicationContext = applicationContext;
}
public static <T> T getBeanByType(Class<T> type){
return SpringContextHolder.applicationContext.getBean(type);
}
}