欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關于Spring @Bean 相同加載順序不同結果不同的問題記錄

 更新時間:2025年02月14日 11:35:31   作者:master-dragon  
本文主要探討了在Spring 5.1.3.RELEASE版本下,當有兩個全注解類定義相同類型的Bean時,由于加載順序不同,最終生成的Bean實例也會不同,文章通過分析ConfigurationClassPostProcessor的執(zhí)行過程,解釋了BeanDefinition的加載和覆蓋機制,感興趣的朋友一起看看吧

問題說明

兩個全注解類

LocalConfig1

@Configuration
public class LocalConfig1 {
    public LocalConfig1(){
        System.out.println("LocalConfig1()");
    }
    @Bean(name = "x1")
    public X x() {
        System.out.println("start new X 1");
        return new X("xName");
    }
}

LocalConfig2

@Configuration
public class LocalConfig2 {
    public LocalConfig2(){
        System.out.println("LocalConfig2()");
    }
    @Bean(name = "x1")
    public X x() {
        System.out.println("start new X 2");
        return new X();
    }
    @Bean
    public Y y() {
        System.out.println("start new Y");
        return new Y();
    }
}

對于@Bean X類型的使用了不同的構造函數(shù)

public class X {
    private String xName;
    @Autowired
    private Y y;
    public X() {
        System.out.println("X()");
    }
    public X(String xName) {
        this.xName = xName;
    }
    public void sy(){
        System.out.println("y:" + y);
    }
    public void sayMyName(){
        System.out.println("xName:" + xName);
    }
}

測試輸出1

測試輸出2

即不同的順序導致了結果的不同

@Bean注解的BeanDefinition加入時機

回顧:https://doctording.blog.csdn.net/article/details/144865082 & https://doctording.blog.csdn.net/article/details/144868096 中的知識:

使用new AnnotationConfigApplicationContext后會默認加入ConfigurationClassPostProcessor的beanDefinition,并在refresh()方法中的invokeBeanFactoryPostProcessors(beanFactory);完成實例化,即得到ConfigurationClassPostProcessor,然后執(zhí)行其 invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry); 方法

因為ConfigurationClassPostProcessor是一個BeanDefinitionRegistryPostProcessor

在執(zhí)行過程中會判斷全注解類

然后繼續(xù)從全注解類中加載可能的bean

從LocalConfig1中可以讀到@Bean注解方法,然后添加BeanDefintion

從LocalConfig2中可以也讀到@Bean注解方法,然后添加BeanDefintion; 其中相同的BeanName直接覆蓋了,如下圖:

所以看全注解加載順序,取了最后那個beanDefinition, 所以出現(xiàn)了了測試現(xiàn)象。

總結

本例是在spring 5.1.3.RELEASE版本下的測試,探究了存在不同全注解類有相同的@Bean的情況,加載順序不同導致的最后Bean實例不同。工作中應該避免這種寫法,同時也要注意自身Spring版本用到了是否有此邏輯

到此這篇關于關于Spring @Bean 相同加載順序不同結果不同的問題記錄的文章就介紹到這了,更多相關Spring @Bean 加載順序內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 在spring?boot3中使用native?image的最新方法

    在spring?boot3中使用native?image的最新方法

    這篇文章主要介紹了在spring?boot3中使用native?image?,今天我們用具體的例子來給大家演示一下如何正確的將spring boot3的應用編譯成為native image,需要的朋友可以參考下
    2023-01-01
  • Hadoop上Data Locality的詳解

    Hadoop上Data Locality的詳解

    這篇文章主要介紹了 Hadoop上Data Locality的詳解的相關資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內容,需要的朋友可以參考下
    2017-10-10
  • JDK  keytool證書工具功能代碼解析

    JDK keytool證書工具功能代碼解析

    這篇文章主要介紹了JDK keytool證書工具功能代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • SpringCloud 服務注冊IP錯誤的解決

    SpringCloud 服務注冊IP錯誤的解決

    這篇文章主要介紹了SpringCloud 服務注冊IP錯誤的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot解決跨域問題小結

    SpringBoot解決跨域問題小結

    在現(xiàn)代Web應用中,由于安全性和隱私的考慮,瀏覽器限制了從一個域向另一個域發(fā)起的跨域HTTP請求,Spring?Boot提供了多種方式來處理跨域請求,本文將介紹其中的幾種方法,感興趣的朋友一起看看吧
    2023-12-12
  • springboot項目啟動慢的問題排查方式

    springboot項目啟動慢的問題排查方式

    這篇文章主要介紹了springboot項目啟動慢的問題排查方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • springboot CompletableFuture異步線程池詳解

    springboot CompletableFuture異步線程池詳解

    這篇文章主要介紹了springboot CompletableFuture異步線程池的使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • IDEA社區(qū)版下載安裝流程詳解(小白篇)

    IDEA社區(qū)版下載安裝流程詳解(小白篇)

    這篇文章主要介紹了IDEA社區(qū)版下載安裝流程詳解(小白篇),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Spring 動態(tài)代理實現(xiàn)代碼實例

    Spring 動態(tài)代理實現(xiàn)代碼實例

    這篇文章主要介紹了Spring 動態(tài)代理實現(xiàn)代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • J2EE基礎之EJB全面了解

    J2EE基礎之EJB全面了解

    下面小編就為大家?guī)硪黄狫2EE基礎之EJB全面了解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07

最新評論