SpringMVC多個@Configuration配置下部分@Bean不生效的原因和解決方法

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

發佈了42 篇原創文章 · 獲贊 24 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章