错误代码:
@Component
public final class Util {
private static Log log = LogFactory.getLog(Util.class);
@Autowired
private static RedisUtil redisUtil;
public static String getValue(String key) {
return redisUtil.getKey(key);
}
原因:
静态变量、类变量不是对象的属性,而是一个类的属性,所以静态方法是属于类(class)的,普通方法才是属于实体对象(也就是New出来的对象)的,spring注入是在容器中实例化对象,所以不能使用静态方法。
解决方法1:
@Component
public final class Util {
private static Log log = LogFactory.getLog(Util.class);
private static RedisUtil redisUtil;
@Autowired
public Util(RedisUtil redisUtil){
Util.redisUtil=redisUtil;
}
public static String getValue(String key) {
return redisUtil.getKey(key);
}
解决方法2:
@Component
public final class Util {
private static Log log = LogFactory.getLog(Util.class);
private static RedisUtil redisUtil;
@Autowired
private RedisUtil redisUtil2;
@PostConstruct
public void beforeInit() {
redisUtil = redisUtil2;
}
public static String getValue(String key) {
return redisUtil.getKey(key);
}
解决方法3:实现ApplicationContextAware类
@Component
public class SMSVerificationUtils implements ApplicationContextAware{
protected static Logger smsLogger=LoggerFactory.getLogger("SMSVerificationUtils");
private static SmsConfig smsConfig;
@Resource(name="smsConfig")
private SmsConfig smsConfigs;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
// TODO Auto-generated method stub
smsConfig=smsConfigs;
}
}