我有一個彈簧啓動應用程序(1.3.1.RELEASE),並且最近在嘗試將@ConfigurationProperties
bean注入到我的配置中時遇到了一個奇怪的行爲。我不是Spring的專家,所以我的問題是如何解釋這種行爲?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 {
<..>
}
}
當應用程序被啓動,我得到一個錯誤,因爲它一無所知me.developer.document.security.SecurityProperties豆春季不能注入SecurityConfiguration.securityProperties。
但,如果我重新命名SecurityProperties
到SicurityProperties
(第二個字母 「E」 - > 「我」) - 它的作品!不要問我怎麼做到這一點,但我只是好奇這種行爲如何解釋?即從我的角度來看,它應該工作或沒有,但不依賴於bean的名字,等..
更新: 如果我不碰類的名稱,但明確指定bean的名字一樣我也工作
package me.developer.document.security;
@Setter
@Getter
@Component("securityProperties.my")
@ConfigurationProperties(prefix = "security")
public class SecurityProperties {
private List<String> apiKeys = new ArrayList<>();
}
而且我在自動裝配過程中不提供任何其他限定符...爲什麼會發生這種情況?
bean的名稱必須與類名相匹配,除了第一個字母用小寫字母命名。例如bean'securityProperties'匹配類SecurityProperties。你可能有一些錯誤導致了這種行爲 – OPK
沒有( )問題是當類名稱與bean名稱不匹配時,即'private SicurityProperties securityProperties'。 –
你有一個xml文件或屬性文件 – OPK