簡體   English   中英

如何在Spring Boot中將YAML屬性與構造函數注入配合使用?

[英]How can I use YAML properties with constructor injection in Spring Boot?

我知道這應該是小菜一碟,但是我什么都沒得到。

在我的Spring Boot應用程序的application.yml文件中,我有一個像這樣的條目:

some:
    constructor:
        property: value

而且我有一個彈簧服務(這是假的,但演示了問題):

package somepackage;

@Service
public class DummyService {
    public DummyService(@Value("${some.constructor.property}") String path) {}
}

啟動失敗,但是:

org.springframework.beans.factory.BeanCreationException:創建文件[...(類文件)...]中定義的名稱為'dummyService'的bean時出錯:bean的實例化失敗; 嵌套的異常是org.springframework.beans.BeanInstantiationException:無法實例化[somepackage.DummyService]:沒有找到默認的構造函數;默認值為0。 嵌套的異常是java.lang.NoSuchMethodException:somepackage.DummyService。()

我如何說服Spring使用非空構造函數,並應從YAML文件獲取該構造函數參數? 注意:我不使用任何XML bean配置文件或任何東西,並且不希望使用。

只需將@Autowired批注放在構造函數上。

@Autowired
public DummyService(@Value("${some.constructor.property}") String path) {}

並且以防萬一有人試圖在Scala中做到這一點-這是我真正想做的,但是想要在Java中獲得答案,然后再嘗試使用Scala-這可行:

@Service
class DummyService @Autowired()(@Value("${some.constructor.property}") val path: String) {

}

此SO案例中涵蓋了Scala構造函數自動裝配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM