在最近的開(kāi)發(fā)中遇到一個(gè)問(wèn)題,使用@Value獲取yml文件中配置的屬性時(shí)始終獲取不到值,一開(kāi)始我以為是沒(méi)有注入的問(wèn)題,或者沒(méi)有寫(xiě)setter方法的問(wèn)題,后來(lái)我發(fā)現(xiàn)這些都都寫(xiě)了然后開(kāi)始百度發(fā)現(xiàn)獲取不到屬性值有這么幾個(gè)原因
獲取不到值的原因
1.沒(méi)有使用Component注解,也就是沒(méi)有注入到容器內(nèi)
2.變量被static修飾
3.在構(gòu)造器中使用了屬性值
問(wèn)題分析
前兩點(diǎn)原因可以否定掉了,我在構(gòu)造器中使用了這個(gè)變量導(dǎo)致的
原因:在這個(gè)問(wèn)題中我忽略了spring Bean的生命周期
-
實(shí)例化Bean:在這個(gè)階段,Spring容器創(chuàng)建Bean的實(shí)例,調(diào)用Bean的構(gòu)造方法。
-
注入屬性:Spring容器會(huì)盡力注入配置的屬性值,包括使用
@Value
注解注入的值。 -
初始化Bean:在這個(gè)階段,Spring容器執(zhí)行一些初始化方法。通常,這包括調(diào)用
InitializingBean
接口的afterPropertiesSet
方法、執(zhí)行在Bean上使用@PostConstruct
注解的方法或自定義的初始化方法。
?解決問(wèn)題
知道了問(wèn)題所在,但是還需要在bean加載的時(shí)候獲取到屬性值怎么辦,可以使用InitializingBean來(lái)解決,InitializingBean
接口是Spring Framework提供的一個(gè)用于初始化Bean的方式之一。它是org.springframework.beans.factory.InitializingBean
接口的一部分。當(dāng)一個(gè)Bean實(shí)現(xiàn)InitializingBean
接口時(shí),它必須提供一個(gè)afterPropertiesSet
方法,該方法將在Bean的屬性設(shè)置之后被自動(dòng)調(diào)用。通常,你可以在這個(gè)方法中執(zhí)行一些初始化邏輯,以確保Bean在被容器實(shí)例化后處于可用狀態(tài)。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-810684.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-810684.html
到了這里,關(guān)于SpringBoot使用@Value獲取不到y(tǒng)aml中配置的值的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!