由于需要在工具类中使用静态成员变量StringRedisTemplate,使用@Autowrite注解注入后发现注入失败,StringRedisTemplate的值为null了,解决办法如下,使用@PostConstruce注解,赋予静态对象redisTemplateStatic一个实例,从而真正实例化静态对象,也可直接使用setter方式实例化redisTemplateStatic,redisTemplate对象需要加上@Autowired注解
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class RedisDto {
public static StringRedisTemplate redisTemplateStatic;
@Autowired
StringRedisTemplate redisTemplate;
@PostConstruct
private void initRedis() {
redisTemplateStatic = this.redisTemplate;
}
}
直接在工具类中调用即可
public static Integer getUserId()
{
Integer userId =userIdLocal.get();
if(userId==null){
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if(attributes!=null){
HttpServletRequest request = attributes.getRequest();
if(request!=null){
userId=getUserId(request, **RedisDto.redisTemplateStatic**);
}
}
}
return userId;
}