第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Spring Bean 生命周期 - 構(gòu)造函數(shù)中的 @value 屬性為空

Spring Bean 生命周期 - 構(gòu)造函數(shù)中的 @value 屬性為空

藍(lán)山帝景 2022-07-20 10:10:02
我正在使用沒有 Spring Boot 的 Spring Framework 4.3。據(jù)我了解 bean 生命周期:加載 bean 定義使用 beanFactoryPostProcessor 類處理 bean 定義實(shí)例化和注入 bean(以正確的順序循環(huán))使用豆類讓垃圾收集器銷毀 beanPropertyPlaceholderConfigurer是一個(gè)BeanFactoryPostProcessor。因此@Value必須在實(shí)例化 bean 之前讀取屬性。(第2步)。這是我的代碼,主類:public static void main(String[] args) {    ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);    ReadValueFromFile dc = ctx.getBean(ReadValueFromFile.class);    System.out.println("Main : " + dc.getUrl());}ReadValueFromFile.java@Component@PropertySource("classpath:db/db.properties")public class ReadValueFromFile {    @Value("${url}")    private String url;    public ReadValueFromFile() {        System.out.println("url constructor : " +  url);    }    @PostConstruct    void init() {        System.out.println("url postconstruct : " +  url);    }    @PreDestroy    void dest() {        System.out.println("url @PreDestroy : " +  url);    }    public String getUrl() {        return url;    }    public void setUrl(String url) {        this.url = url;    }}配置類:@Configuration@ComponentScan(basePackages={"tn.esprit.beans"})public class AppConfig {     //it works well without declaring this bean.//   @Bean//   public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {//      return new PropertySourcesPlaceholderConfigurer();//   }}最后是我在 src/main/resources/db 下的屬性文件:url=jdbc:mariadb://localhost:3306/client_project當(dāng)我運(yùn)行主類時(shí),我得到這個(gè)輸出:url constructor : nullurl postconstruct : jdbc:mariadb://localhost:3306/client_projectMain : jdbc:mariadb://localhost:3306/client_project當(dāng) spring 調(diào)用此構(gòu)造函數(shù)時(shí), url 屬性為 null !如果@Value必須在實(shí)例化 bean 之前讀取屬性,則必須設(shè)置 url 并且與 null 不同。不是嗎?我的代碼有問題嗎?還是我對(duì)bean生命周期的理解?
查看完整描述

1 回答

?
弒天下

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊

當(dāng) spring 調(diào)用此構(gòu)造函數(shù)時(shí), url 屬性為 null !如果必須在實(shí)例化 bean 之前讀取 @Value 屬性,則必須設(shè)置 url 并且與 null 不同。不是嗎?

這不是它的工作原理,如果ReadValueFromFilerequire的構(gòu)造函數(shù)@Value那么只有 Spring 將保證在實(shí)例化ReadValueFromFileurl之前可用,否則 SpringReadValueFromFile使用默認(rèn)構(gòu)造函數(shù)進(jìn)行實(shí)例化,然后通過調(diào)用屬性的setter方法,url它將注入值。

因此,在構(gòu)造函數(shù)運(yùn)行期間,您將看不到該值。

您的代碼沒有任何問題。

您需要了解 Spring 如何注入依賴項(xiàng)(或值):

  1. Constructor注入 - 表示依賴項(xiàng)/值必須在注入的依賴實(shí)例化期間存在

  2. Setter注入 - 表示依賴實(shí)例化期間不需要依賴項(xiàng)/值,但稍后將使用 setter 方法注入

  3. Field注入 - 表示依賴實(shí)例化期間不需要依賴項(xiàng)/值,但稍后將使用反射注入


查看完整回答
反對(duì) 回復(fù) 2022-07-20
  • 1 回答
  • 0 關(guān)注
  • 196 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)