@Value这个注解为什么不能给静态变量注入值

📅 发布时间:2026/7/18 17:40:15
@Value这个注解为什么不能给静态变量注入值 讲这个问题是因为我在写考核的时候 遇到的一种情况就是 在静态变量上加上Value这个注解 进行配置值 但得到这个变量的值始终是null后面重新了解后才发现 Value这个注解 是Spring在创建对象的时候也就是实例化Bean的时候 去读取配置文件然后赋值给被Value标注的成员变量但是因为静态变量属于类本身不属于任何对象。 而Spring只管理Bean对象不管理类所以Spring不会帮静态变量注入值的如果我们一定要把配置 注入到 静态变量里我们应该怎么办其实是有两种办法的一、最简单 既然Spring是管理对象的那么我们就不跟他对着干 如果这个静态变量所在的类 已经 被Spring管理了 也就是这个类上面加的有Component。Service等 这些注解那么我们就只需要将静态变量 改成 普通变量去掉static关键字 然后使用Value正常注入就行。二、如果变量必须是静态的比如工具类里要用配置但工具类本身不需要被其他类进行注入使用只是为了读配置那么 我们就可以 先让Spring将所需要的配置 注入到该类的 一个普通的成员变量里也就是使用Value注解正常注入然后我们在Spring对象创建完成以后手动的将这个值转交给静态变量这里我们需要在初始化方法上使用PostConstrut注解但这两种方法并不是随便选的我们需要看使用场景当我们这个静态变量 所在的类本身就是Bean对象 我们就直接去掉static就行当我们的变量必须是静态的时候 我们就用方法二进行中转但在实际开发中我们应该尽量少用静态变量存配置因为静态变量它是全局共享的测试的时候容易相互污染。能用 Spring 管理就用 Spring 管理这样代码更干净、更安全