spring boot 無法獲取到@value 的值

spring boot 無法獲取到@value 的值

問題

有時候需要在構造函數中完成一些初始化的操作,而這些操作同時也需要讀取一些配置文件中的值。

@Configuration
public class ConfigDemo {
    @Value("${url}")
    private String url;
    
    public ConfigDemo (){
        //此時url null
        System.out.println(url);
    }
}

原因

主要問題的原因就是,構造函數的執行順序先於類屬性的賦值。在構造函數中使用屬性的值且從application.yml通過@Value獲取,此時Spring容器還沒有向屬性賦值。這是Spring Bean的聲明週期的屬性造成的。

解決辦法

@Configuration
public class ConfigDemo  implements InitializingBean {
    @Value("${url}")
    private String url;

    public ConfigDemo (){
        //此時url null
        System.out.println(url);
        //or do Other something
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println(url);
        //or do Other init something
    }
}

實現InitializingBean重寫方法,在屬性賦值後進行初始化的操作。將原來的由構造方法的初始化的操作提取到afterPropertiesSet中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章