为什么@UtilityClass标注的工具类中@Value注入属性返回null
原有代码不生效的原因
@Value是Spring提供的配置注入注解,仅能给Spring容器管理的Bean的实例成员变量注入配置值,默认不支持给静态成员变量注入值。- 你用到的Lombok
@UtilityClass注解会自动把类的所有字段、方法强制设置为static修饰,你定义的testString本质是静态字段,自然无法被@Value正常注入,初始值就是null。 - 你调用方法时用的是
MyUtil.test()静态类调用方式,没有用到Spring托管的Bean实例,即便你给类加上@Component等容器托管注解,没有做静态字段的特殊注入处理的话,调用返回的依然是null。
如果需要保留工具类的静态调用方式,可以参考如下实现:
// 去掉@UtilityClass注解,添加容器托管注解 @Component public class MyUtil { private static String testString; // 通过非静态set方法接收Spring注入的配置值,再赋值给静态字段 @Value("${myvalue}") private void setTestString(String testStr){ MyUtil.testString = testStr; } public static String test(){ return testString; } }
内容的提问来源于stack exchange,提问作者timo
相关产品推荐
相关产品推荐

