中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spring?Bean創建方法是什么

發布時間:2022-01-17 14:06:13 來源:億速云 閱讀:157 作者:iii 欄目:開發技術

本篇內容主要講解“spring Bean創建方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“spring Bean創建方法是什么”吧!

bean創建的流程圖

寫在前面:建議大家一定要自己用實例跑一遍,做好記錄。如果只是看看會非常抽象。此流程圖作為梗概,便于加強記憶和理解,新手或無基礎的有個印象即可。等跟隨本文走通一遍,在回過頭看這個圖,或許會有收獲

spring?Bean創建方法是什么

源碼走一遍bean的定義這是我的bean目錄結構,只是做一個例子

spring?Bean創建方法是什么

獲取核心容器對象,bean最后都會放在此容器對象中

    *   ApplicationContext的三個實現類
    *   ClassPathXmlApplicationContext  它可以加載類路徑下的配置文件,要求必須在類路徑下
    *   FileSystemXmlApplicationContext  可以加載任意路徑下的配置文件,必須有訪問權限
    *   AnnotationConfigApplicationContext 用于讀取注解創建容器的
    
    這里我用ClassPathXmlApplicationContext來做演示
    
   public class MyTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    }
}

快速開始

建議用IDEA的debug模式來觀察Spring的IOC過程

spring?Bean創建方法是什么

進入到此類的構造方法中

spring?Bean創建方法是什么

查看setConfigLocations,就是將配置文件加載到configLocations里去

spring?Bean創建方法是什么

向下執行,查看refresh()

spring?Bean創建方法是什么

this.prepareRefresh(): 此方法是準備工作,大家感興趣可以點進去看一下,可以看到里面是獲取時間,獲取環境信息的一些設置。

this.obtainFreshBeanFactory(): 這一步是創建beanFactory,并且讀取Bean的信息,源碼注釋中還有寫到

// Tell the subclass to refresh the internal bean factory.會告訴子類去刷新內部bean工廠

this.refreshBeanFactory:

	 * This implementation performs an actual refresh of this context's underlying
	 * bean factory, shutting down the previous bean factory (if any) and
	 * initializing a fresh bean factory for the next phase of the context's lifecycle.
	 
	 這個實現類的方法會刷新容器中的beanFactory,關閉之前存在的并且初始化新的beanFactory

spring?Bean創建方法是什么

利用this.createBeanFactory() 創建了一個beanFactory,類型為DefaultListableBeanFactory

這個類接著往下走:this.loadBeanDefinitions(beanFactory);

	 * Load bean definitions into the given bean factory, typically through
	 * delegating to one or more bean definition readers.
	 
	 這個方法會將beandefinitionsReader讀取到的bean definitions放入bean工廠,我們以上提出的三種
	 注入方式都會走到這里,將bean信息丟進去

返回上述 refresh()

this.prepareBeanFactory(beanFactory); 設置和忽略一些對象值

this.postProcessBeanFactory(beanFactory); 空方法可自定義擴展

this.invokeBeanFactoryPostProcessors(beanFactory);

	 * Instantiate and invoke all registered BeanFactoryPostProcessor beans,
	 * respecting explicit order if given.
	 * <p>Must be called before singleton instantiation.
	 
	 實例化所有beanFactory組件

registerBeanPostProcessors(beanFactory);

Instantiate and register all BeanPostProcessor beans,  //先注冊再調用

initApplicationEventMulticaster(); 觀察者模式監聽器, 監聽組件的相關狀態,并決定相關調用方法。

finishBeanFactoryInitialization(beanFactory); 重要!!

	 * Finish the initialization of this context's bean factory,
	 * initializing all remaining singleton beans.
	 
	 完成了容器bean factory的初始化,并且初始化其他的bean單例對象

beanFactory.preInstantiateSingletons(); 實例化方法

此方法最后this.getBean(beanName)

繼續

spring?Bean創建方法是什么

Return an instance, which may be shared or independent, of the specified bean.

注釋已經很清楚了,此方法會返回一個實例,就是我們的bean對象

spring?Bean創建方法是什么

進入到createBean方法中

spring?Bean創建方法是什么

繼續進入![image-20200714221630608](/Users/hjj/Library/Application Support/typora-user-images/image-20200714221630608.png)

繼續進入

spring?Bean創建方法是什么

spring?Bean創建方法是什么

Instantiate the given bean using its default constructor.

這個方法注釋說明了實例化對象是用構造器完成的

繼續看他如何構造的

spring?Bean創建方法是什么

spring?Bean創建方法是什么

spring?Bean創建方法是什么

ca 就是Constructor,從這里我們基本可以看出容器內,bean對象的實例化
是利用反射的基本原理,獲取類構造器,然后newInstance來實現的

以上就是bean對象實例化的基本過程,下面是實例化完成后的初始化過程

回到這里,實例化完成后

spring?Bean創建方法是什么

spring?Bean創建方法是什么

注釋說明了在populateBean完成bean的初始化

繼續

spring?Bean創建方法是什么

會看到在此方法里會調用前置和后置處理器來初始化Bean

到此,相信大家對“spring Bean創建方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

横山县| 吉木乃县| 新蔡县| 庐江县| 许昌市| 门头沟区| 阿克苏市| 分宜县| 恭城| 樟树市| 镇康县| 凌源市| 当阳市| 库伦旗| 安顺市| 明星| 营口市| 道孚县| 米脂县| 育儿| 清水县| 海晏县| 道真| 轮台县| 达尔| 屏边| 嘉兴市| 托克托县| 报价| 屏东县| 岢岚县| 犍为县| 灌云县| 应城市| 兴安盟| 常宁市| 天镇县| 策勒县| 聂荣县| 秦皇岛市| 万年县|