2015-11-25 38 views
5

我知道這應該是一塊蛋糕,但我只是沒有得到任何地方。如何在Spring Boot中使用YAML屬性和構造函數注入?

在我的春天啓動的應用程序,在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]:找不到默認構造函數; 嵌套的例外是java.lang.NoSuchMethodException: somepackage.DummyService()

我如何說服春天,它應該使用非空構造函數,它應該從YAML文件中構造函數的參數?注意:我沒有使用任何XML bean配置文件或任何東西,並且不願意。

回答

2

只需在構造函數中添加@Autowired註釋。

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

啊,我在錯誤的地方已經@Autowired。非常感謝。 – user1953555

0

以防萬一有人在試圖做到這一點在斯卡拉 - 這就是我真正想要做的,但希望使用Scala試圖之前獲得Java中的答案 - 這工作:

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

} 

這是覆蓋在this SO case for scala constructor autowiring.

相關問題