最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring bean對(duì)象實(shí)例化實(shí)現(xiàn)過(guò)程圖解

 更新時(shí)間:2020年07月10日 16:16:35   作者:edda_huang  
這篇文章主要介紹了Spring bean對(duì)象實(shí)例化實(shí)現(xiàn)過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

好了 我們聊聊 Bean 的實(shí)例化過(guò)程的幾個(gè)重要角色

BeanDefinitionRegistryPostProcessor 接口

Refresh().invokeBeanFactoryPostProcessors 這個(gè)方法里面。

BeanDefinitionRegistryPostProcessor 這個(gè)接口的調(diào)用分為三部:

1、調(diào)用實(shí)現(xiàn)了 PriorityOrdered 排序接口

2、調(diào)用實(shí)現(xiàn)了 Ordered 排序接口

3、沒(méi)有實(shí)現(xiàn)接口的調(diào)用

這個(gè)接口我的理解:獲取 BeanDefinitionRegistry 對(duì)象,獲取到這個(gè)對(duì)象就可以獲取這個(gè)對(duì)象中注冊(cè)的所有 BeanDefinition 對(duì)象,所以我們知道了,我們擁有這個(gè)對(duì)象就可以完成里面所有 BeanDefinition 對(duì)象的修改新增操作

BeanPostProcessor 的注冊(cè)

Refresh().registerBeanPostProcessors 這個(gè)方法里面。

拿到 BeanFactory 中所有注冊(cè)的 BeanDefinition 對(duì)象的名稱(chēng) beanName。

然后判斷是否實(shí)現(xiàn)了 PriorityOrdered 排序接口,Ordered 排序接口,getBean 是將該 ppName 對(duì)應(yīng)的 BeanDefinition 對(duì)象實(shí)例化。

把對(duì)應(yīng)的 BeanPostProcessor 對(duì)象注冊(cè)到 BeanFactory 中,BeanFactory 中有一個(gè)list 容器接收。getSingleton 方法代碼位置:AbstractBeanFactory.doGetBean 方法中

方法里面核心要點(diǎn):

把 beanName 添加到 singletonsCurrentlyInCreation Set 容器中,在這個(gè)集合里面的 bean 都是正在實(shí)例化的 bean,就是實(shí)例化還沒(méi)做完的 BeanName

調(diào)到 getObject 方法,完成 bean 的實(shí)例化。接下來(lái)

getObject 調(diào)用完后,就代表著 Bean 實(shí)例化已經(jīng)完成了,這時(shí)候就需要

1、singletonsCurrentlyInCreation 把 beanName 從這個(gè)集合中刪除

2、addSingleton,把 bean 緩存到一級(jí)緩存中

createBean

方法代碼位置:AbstractBeanFactory.doGetBean 方法中

這個(gè)方法是 bean 實(shí)例化核心方法

實(shí)例化方法,把 bean 實(shí)例化,并且包裝成 BeanWrapper點(diǎn)進(jìn)這個(gè)方法里面。

這個(gè)方法是反射調(diào)用類(lèi)中的 factoryMethod 方法。這要知道@Bean 方法的原理,實(shí)際上spring 會(huì)掃描有@bean 注解的方法,然后把方法名稱(chēng)設(shè)置到 BeanDefinition 的 factoryMethod屬性中,接下來(lái)就會(huì)調(diào)到上面截圖中的方法實(shí)現(xiàn)@Bean 方法的調(diào)用。該方法里面的參數(shù)解析過(guò)程不需要了解。

determineConstructorsFromBeanPostProcessors

這個(gè)方法是 BeanPostProcessor 接口類(lèi)的首次應(yīng)用,最終會(huì)掉到AutowiredAnnotationBeanPostProcessor 類(lèi)的方法,在方法中會(huì)掃描有注解的構(gòu)造函數(shù)然后完成裝配過(guò)程。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何利用java實(shí)現(xiàn)生成PDF文件

    如何利用java實(shí)現(xiàn)生成PDF文件

    前段時(shí)間因?yàn)橄嚓P(guān)業(yè)務(wù)需求需要后臺(tái)生成pdf文件,下面這篇文章主要給大家介紹了關(guān)于如何利用java實(shí)現(xiàn)生成PDF文件的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Java多線程——基礎(chǔ)概念

    Java多線程——基礎(chǔ)概念

    這篇文章主要介紹了java多線程編程實(shí)例,分享了幾則多線程的實(shí)例代碼,具有一定參考價(jià)值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下,希望可以幫到你
    2021-07-07
  • 最新評(píng)論

    正镶白旗| 呼伦贝尔市| 鹤庆县| 固镇县| 内江市| 永靖县| 西青区| 阿鲁科尔沁旗| 西华县| 安阳市| 临颍县| 松江区| 巴里| 庄浪县| 建水县| 湖南省| 博客| 鹤山市| 邢台县| 阳西县| 休宁县| 腾冲县| 淮滨县| 永宁县| 上杭县| 宜兰市| 静乐县| 佛山市| 萨嘎县| 宜都市| 静宁县| 清河县| 肇东市| 惠东县| 大理市| 鹿泉市| 临武县| 岳普湖县| 红河县| 陇南市| 共和县|