现有一个类使用了@component和@RefreshScope注解,声明了一个注解@value的private非static变量,构造器中引用了此变量,打断点会发现spring调用类构造器时@value注入变量为null,spring容器启动完成后根据web请求调用此类的其他方法时断点会看到@value标记的变量已被赋值为nacos中的值。而如果不使用类作用域局部变量,而改为在构造函数参数处使用@value,则会注入成功。
请问这是什么原因呢
zd287kbt1#
Any help?
u5rb5r592#
服务端,客户端啥版本
z4bn682m3#
服务端 2.0.3 standalone客户端 springCloudAlibabaVersion = '2.2.7.RELEASE'
6qfn3psc4#
本身value注解就是在构造之后才设置值的,你在构造器中取不到值是正常的
k10s72fa5#
我是说你使用类作用域局部变量的情况下
1szpjjfi6#
构造器形参处使用@value可以注入,所以@value到底是什么时候解析的呢
mbjcgjjk7#
类局部变量初始化不是应该在构造器方法执行之前吗
dohp0rv58#
但是@value注解设置时在spring bean生命周期的 属性赋值阶段
aemubtdh9#
这样的话,就是说@value是在构造bean时注入,此时类私有变量已完成初始化,构造器方法还未执行,所以构造器形参可以接收注入,而私有变量在构造器中读取的值不是注入后的
u0njafvf10#
那注入时不是直接赋值私有变量吗,既然构造器执行前赋值,为啥构造器里读不到呢。。。如果不是构造器前赋值,为啥构造器形参可以注入
bsxbgnwa11#
构造注入和属性注入本身就是不同的逻辑啊 建议可以阅读一下spring这块的源码
xj3cbfub12#
好的吧,idea跳转不了lib中的注入代码。。前几天没读懂
12条答案
按热度按时间zd287kbt1#
Any help?
u5rb5r592#
服务端,客户端啥版本
z4bn682m3#
服务端 2.0.3 standalone
客户端 springCloudAlibabaVersion = '2.2.7.RELEASE'
6qfn3psc4#
本身value注解就是在构造之后才设置值的,你在构造器中取不到值是正常的
k10s72fa5#
我是说你使用类作用域局部变量的情况下
1szpjjfi6#
构造器形参处使用@value可以注入,所以@value到底是什么时候解析的呢
mbjcgjjk7#
类局部变量初始化不是应该在构造器方法执行之前吗
dohp0rv58#
但是@value注解设置时在spring bean生命周期的 属性赋值阶段
aemubtdh9#
这样的话,就是说@value是在构造bean时注入,此时类私有变量已完成初始化,构造器方法还未执行,所以构造器形参可以接收注入,而私有变量在构造器中读取的值不是注入后的
u0njafvf10#
那注入时不是直接赋值私有变量吗,既然构造器执行前赋值,为啥构造器里读不到呢。。。如果不是构造器前赋值,为啥构造器形参可以注入
bsxbgnwa11#
构造注入和属性注入本身就是不同的逻辑啊 建议可以阅读一下spring这块的源码
xj3cbfub12#
好的吧,idea跳转不了lib中的注入代码。。前几天没读懂