nacos自动注入与Spring Boot容器启动先后顺序

yftpprvb  于 2021-12-26  发布在  Java
关注(0)|答案(12)|浏览(461)

现有一个类使用了@component和@RefreshScope注解,声明了一个注解@value的private非static变量,构造器中引用了此变量,打断点会发现spring调用类构造器时@value注入变量为null,spring容器启动完成后根据web请求调用此类的其他方法时断点会看到@value标记的变量已被赋值为nacos中的值。而如果不使用类作用域局部变量,而改为在构造函数参数处使用@value,则会注入成功。

请问这是什么原因呢

zd287kbt

zd287kbt1#

Any help?

u5rb5r59

u5rb5r592#

服务端,客户端啥版本

z4bn682m

z4bn682m3#

服务端 2.0.3 standalone
客户端 springCloudAlibabaVersion = '2.2.7.RELEASE'

6qfn3psc

6qfn3psc4#

本身value注解就是在构造之后才设置值的,你在构造器中取不到值是正常的

k10s72fa

k10s72fa5#

我是说你使用类作用域局部变量的情况下

1szpjjfi

1szpjjfi6#

构造器形参处使用@value可以注入,所以@value到底是什么时候解析的呢

mbjcgjjk

mbjcgjjk7#

类局部变量初始化不是应该在构造器方法执行之前吗

dohp0rv5

dohp0rv58#

但是@value注解设置时在spring bean生命周期的 属性赋值阶段

aemubtdh

aemubtdh9#

这样的话,就是说@value是在构造bean时注入,此时类私有变量已完成初始化,构造器方法还未执行,所以构造器形参可以接收注入,而私有变量在构造器中读取的值不是注入后的

u0njafvf

u0njafvf10#

那注入时不是直接赋值私有变量吗,既然构造器执行前赋值,为啥构造器里读不到呢。。。如果不是构造器前赋值,为啥构造器形参可以注入

bsxbgnwa

bsxbgnwa11#

构造注入和属性注入本身就是不同的逻辑啊 建议可以阅读一下spring这块的源码

xj3cbfub

xj3cbfub12#

好的吧,idea跳转不了lib中的注入代码。。前几天没读懂

相关问题