今天用到了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下的方法名,改成不一致的。