今天用到了Spring的InitializingBean來初始化一些信息,分別在兩個@Configuration下用InitializingBean初始化兩種信息,然而,只有一個@Configuration下的InitializingBean初始化成功,另一個沒初始化。
代碼如下:
@Configuration
public class Config1 {
@Bean
public InitializingBean init(){
return new InitializingBean(){
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("這個沒初始化");
}
};
}
}
@Configuration
public class Config2 {
@Bean
public InitializingBean init(){
return new InitializingBean(){
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("初始化成功");
}
};
}
}
然後我就調試了一下源碼,原來是Bean重名了,後面註冊的Bean把前面的Bean給覆蓋了。
Spring用@Bean註冊Bean時,如果@Bean不指定name的話就用方法名做爲name,如果有同名的Bean後面註冊的會把前面已經註冊的給覆蓋掉。
所以解決方法也很簡單:
一、給Bean指定name:@Bean(name=”xxx”)(推薦)。
二、是改@Bean下的方法名,改成不一致的。