У меня есть приложение загрузки весны (1.3.1.RELEASE) и недавно испытал странное поведение при попытке вставить в мою конфигурацию bean-компонент @ConfigurationProperties
. Я не эксперт весной, поэтому мой вопрос: как объяснить это поведение?Spring: Ввод внешних свойств в java Конфигурации
Так установка такова:
MyApplication.java:
package me.developer;
@SpringBootApplication
public class MyApplication {
public static void main(final String... args) {
SpringApplication.run(<..>, args);
}
}
SecurityProperties.java:
package me.developer.document.security;
@Setter
@Getter
@Component
@ConfigurationProperties(prefix = "security")
public class SecurityProperties {
private List<String> apiKeys = new ArrayList<>();
}
SecurityConfiguration.java
package me.developer.document;
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private SecurityProperties securityProperties;
@Override
protected void configure(final HttpSecurity http) throws Exception {
<..>
}
}
При запуске приложения я получаю сообщение об ошибке, что весна не может впрыснуть SecurityConfiguration.securityProperties, потому что он ничего не знает о me.developer.document.security.SecurityProperties фасоли.
Но если переименовать SecurityProperties
в SicurityProperties
(вторая буква "е" -> "я") - это работает! Не спрашивайте меня, как я дошел до этого, но мне просто интересно, как это поведение можно объяснить? То есть с моей точки зрения он должен либо работать или нет, но не в зависимости от названия бобов, и т.д. ...
Update: Я также работаю, если я не касаюсь имени класса, но явно указать имя боба как что
package me.developer.document.security;
@Setter
@Getter
@Component("securityProperties.my")
@ConfigurationProperties(prefix = "security")
public class SecurityProperties {
private List<String> apiKeys = new ArrayList<>();
}
И я не предоставляю никаких дополнительных квалификаторов во время автопостановки ... Почему это происходит?
имя компонента должно совпадать с именем класса, за исключением того, что оно обозначено строчной буквой для первой буквы. например bean 'securityProperties' соответствует классу' SecurityProperties'. у вас, вероятно, возникла некоторая опечатка – OPK
Nope ( Проблема заключается в том, что имя класса не совпадает с именем bean. Ie 'private SicurityProperties securityProperties'. –
У вас есть файл xml или файл свойств – OPK