产生原因:
由于控制层中使用了@RefreshScope如图
主要缘由在spring收集类信息的时候,会判断类上是否有使用 @Scope注解(包括其子注解)
默认情况下,被@RefreshScope
注解的Bean是懒加载的,并且使用CGLIB代理模式。
懒加载的 Bean 在 Spring 中默认是在第一次被请求时才被实例化,而 @Value
注解是在 Bean 实例化的时候进行属性注入的。因此,如果一个 Bean 是懒加载的,它的实例化时机可能在属性注入之前,导致 @Value
注解无法获取配置文件的属性。
解决方法:
我们先进入@RefreshScope注解中如图所示:
我们可以看到他的加载模式的默认值为 “ScopedProxyMode.TARGET_CLASS”
我们只需要将 “ScopedProxyMode.TARGET_CLASS” 修改为“ScopedProxyMode.No”即可
如图