Я пробовал новую версию Spring Boot 2.2.0.RC1, в частности новую функцию привязки конструктора свойств конфигурации, описанную в разделе 2.8.2. Конструктор привязки. Я создал очень маленький проект с таким классом:
@Configuration
@ConfigurationProperties("acme")
public class AppConfig {
private final String stuff;
public AppConfig(String stuff) {
this.stuff = stuff;
}
public String getStuff() {
return stuff;
}
}
и application.yml вроде этого:
server:
port: 9000
acme:
stuff: hello there
Мой основной метод в этом классе:
@SpringBootApplication
public class AcmeApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(AcmeApplication.class)
.logStartupInfo(true)
.bannerMode(Banner.Mode.CONSOLE)
.web(WebApplicationType.SERVLET)
.run();
}
}
Результатом запуска приложения является следующий вывод:
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in com.acme.config.AppConfig required a bean of type 'java.lang.String
' that could not be found.
Action:
Consider defining a bean of type 'java.lang.String' in your configuration.
Интересно, если я изменю код в классе AppConfig, чтобы использовать привязку свойств, удалив конструктор, удалив "финал""Модификатор из поля" вещи "и добавление метода setStuff (String), приложение запускается нормально (метод setStuff вызывается, как и ожидалось).
Чего мне не хватает при попытке заставить работать привязку конструктора? Я попытался удалить аннотацию @Configuration, добавить аннотацию @EnableConfigurationProperties, добавить @ConfigurationPropertiesScan и т. Д., Но из прочтения документации ни одна из этих вещей, похоже, здесь не применима в любом случае. Мне кажется, что он пытается внедрить бины Spring, а не создавать и внедрять объекты свойств конфигурации. Вот почему я подумал, что, возможно, удаление аннотации @Configuration поможет, но это не имеет значения. Кстати, я хотел бы, чтобы этот AppConfig был Spring Bean, чтобы я мог внедрить его в классы Service, например.