亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring bean對象實例化實現(xiàn)過程圖解

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

好了 我們聊聊 Bean 的實例化過程的幾個重要角色

BeanDefinitionRegistryPostProcessor 接口

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

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

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

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

3、沒有實現(xiàn)接口的調(diào)用

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

BeanPostProcessor 的注冊

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

拿到 BeanFactory 中所有注冊的 BeanDefinition 對象的名稱 beanName。

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

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

方法里面核心要點:

把 beanName 添加到 singletonsCurrentlyInCreation Set 容器中,在這個集合里面的 bean 都是正在實例化的 bean,就是實例化還沒做完的 BeanName

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

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

1、singletonsCurrentlyInCreation 把 beanName 從這個集合中刪除

2、addSingleton,把 bean 緩存到一級緩存中

createBean

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

這個方法是 bean 實例化核心方法

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

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

determineConstructorsFromBeanPostProcessors

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

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

相關(guān)文章

  • 基于Freemarker和xml實現(xiàn)Java導(dǎo)出word

    基于Freemarker和xml實現(xiàn)Java導(dǎo)出word

    這篇文章主要介紹了基于Freemarker和xml實現(xiàn)Java導(dǎo)出word,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Springboot整合junit過程解析

    Springboot整合junit過程解析

    這篇文章主要介紹了Springboot整合junit過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • 如何使用Java調(diào)用Spark集群

    如何使用Java調(diào)用Spark集群

    這篇文章主要介紹了如何使用Java調(diào)用Spark集群,我搭建的Spark集群的版本是2.4.4,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • Kotlin實現(xiàn)靜態(tài)方法

    Kotlin實現(xiàn)靜態(tài)方法

    這篇文章主要介紹了Kotlin實現(xiàn)靜態(tài)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 使用XSD校驗Mybatis的SqlMapper配置文件的方法(2)

    使用XSD校驗Mybatis的SqlMapper配置文件的方法(2)

    這篇文章主要介紹了使用XSD校驗Mybatis的SqlMapper配置文件的方法(2)的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • Spring?Boot?集成?Swagger2構(gòu)建?API文檔

    Spring?Boot?集成?Swagger2構(gòu)建?API文檔

    這篇文章主要介紹了Spring?Boot?集成?Swagger2構(gòu)建?API文檔,通過使用?Swagger,我們只需要按照它所給定的一系列規(guī)范去定義接口以及接口的相關(guān)信息,然后它就能幫我們自動生成各種格式的接口文檔,方便前后端開發(fā)者進(jìn)行前后端聯(lián)調(diào),下文需要的朋友可以參考一下
    2022-03-03
  • 詳解mybatis #{}和${}的區(qū)別、傳參、基本語法

    詳解mybatis #{}和${}的區(qū)別、傳參、基本語法

    這篇文章主要介紹了mybatis #{}和${}的區(qū)別、傳參、基本語法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot從繁至簡的框架基礎(chǔ)教程

    SpringBoot從繁至簡的框架基礎(chǔ)教程

    Spring Boot是由Pivotal團(tuán)隊提供的全新框架,其設(shè)計目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程。該框架使用了特定的方式來進(jìn)行配置,從而使開發(fā)人員不再需要定義樣板化的配置
    2022-10-10
  • JAVA對象JSON數(shù)據(jù)互相轉(zhuǎn)換的四種常見情況

    JAVA對象JSON數(shù)據(jù)互相轉(zhuǎn)換的四種常見情況

    這篇文章主要介紹了JAVA對象JSON數(shù)據(jù)互相轉(zhuǎn)換的四種常見情況,需要的朋友可以參考下
    2014-04-04
  • Spring Boot和Hazelcast使用詳解

    Spring Boot和Hazelcast使用詳解

    這篇文章主要介紹了Spring Boot和Hazelcast使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09

最新評論