2015-11-25 3 views
5

Я знаю, что это должен быть кусок торта, но я просто ничего не получаю.Как использовать свойства YAML с введением конструктора в 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: Ошибка создание bean-компонента с именем «dummyService», определенным в файле [... (класс файл) ...]: Ошибка создания бина; Вложенное исключение: org.springframework.beans.BeanInstantiationException: Не удалось выполнить экземпляр [somepackage.DummyService]: конструктор по умолчанию не найден; вложенного исключения java.lang.NoSuchMethodException:. somepackage.DummyService()

Как я могу убедить Spring, что он должен использовать не пустой конструктор, и он должен получить этот параметр конструктора из файла YAML? Примечание. Я не использую какие-либо файлы конфигурации XML-компонента или что-то еще, и не хотел бы этого делать.

ответ

2

Просто разместите аннотацию @Autowired на вашем конструкторе.

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

Ах, я @Autowired в неправильном месте. Огромное спасибо. – user1953555

0

И только в случае, если кто-то пытается сделать это в Scala - что то, что я действительно пытался сделать, но хотел бы получить ответ на Java, прежде чем пытаться его Scala - это работает:

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

} 

Это покрыто this SO case for scala constructor autowiring.

Смежные вопросы