Spring中static变量不能@value注入的原因

牧云@^-^@ 提交于 2020-02-29 17:05:33

 

今天本想使用@Value的方式使类中的变量获得yml文件中的配置值,然而一直失败,获得的一直为null。

类似于这样写的。

public class RedisShardedPool {
private static ShardedJedisPool pool;//sharded jedis连接池
@Value("redis.max.total")
private static Integer maxTotal;
……
}

后来发现是因为这个变量是static的,而spring不支持依赖注入值到静态变量。
然后看到有人通过setter注入实现,如下

@Component
public class TestValue {

public static String maxTotal;

@Value("${redis.max.total}")
public void setDatabase(String maxTotal) {
TestValue.maxTotal= maxTotal;
}
}

于是我也改成这种样子的,但是还是获得不到值,因为我没在类上加@Component注解(或者类似的注解),所以spring扫描不到,也就识别不出,@Value还是会得到null。由于我这个是工具类,里面都是static方法,调用时也都是调用类方法,所以也不需要申明为component,也不需要通过@Autowired或者@Resource调用。而且,由于这个类里面是static方法和属性,也不能通过调用其他非static的属性和方法的方式来获得值。故放弃这种实现,只好自己写一个读取配置文件的工具类,通过调用配置文件工具类类方法来解析配置文件中数据。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!