spring-beans模塊分析

描述:spring-beans負責實現Spring框架的IOC模塊

UML結構圖如下:

在這里插入圖片描述

AbstractBeanFactory:BeanFactory接口的抽象實現類,提供了ConfigurableBeanFactory 完整SPI。
通過DefaultSingletonBeanRegistry實現了單例緩存(singleton cache).
實現了通過FactoryBean判斷bean類型(singleton/prototype)功能,處理,別名和合并bean definition功能,創建,獲取和銷毀bean對象功能,內部引用了parentBeanFactory對象,實現了BeanFactory的雙親委派結構

核心方法:

1.createBean

整體流程如下:
在這里插入圖片描述
resloveBeanClass具體實現:返回RootBeanDefinition對象的beanClass屬性或者其他的classloader根據RootBeanDefinition對象的beanClassName屬性解析出的Class<?>

resloveBeforeInstantiation具體實現:遍歷beanFactory對象的beanPostProcessors列表兩次,對當前bean分別遞歸調用beanPostProcessor接口的postProcessBeforeInstantiation(轉化為InstantiationAwareBeanPostProcessor類型)和 postProcessAfterInitialization方法(上一次接口調用的返回值作為下一次接口調用的請求)

doCreateBean具體實現:
在這里插入圖片描述
createBeanInstance具體實現如下:

1.如果RootBeanDefinition對象定義了instanceSupplier屬性,返回instanceSupplier.get()

2.如果RootBeanDefinition對象的factoryMethodName屬性不為空,返回通過factoryMethod方法構造的實例

3.如果RootBeanDefinition對象的resolvedConstructorOrFactoryMethod屬性不為空,返回通過特定方式構造的實例

4.遍歷beanPostProcessor(轉化為SmartInstantiationAwareBeanPostProcessor)列表,使用determineCandidateConstructors(beanClass, beanName)獲取特定構造器,返回特定構造器返回的實例

5.返回無參構造器

AbstractApplicationContext:org.springframework.context.ApplicationContext接口的抽象實現,用于創建或者刷新IOC容器

核心方法:

1.refresh

創建或者刷新IOC容器

執行流程如下:
在這里插入圖片描述
1.1 prepareBeanFactory詳解

流程如下:
在這里插入圖片描述
1.2 invokeBeanFactoryPostProcessors詳解

流程如下:
在這里插入圖片描述
備注:如果beanFactory是BeanDefinitionRegistry類型的話,在beanFactoryPostProcessors和beanFactory查找BeanDefinitionRegistryPostProcessor類型,并執行相應方法

1.3 登記ApplicationListener對象

ApplicationListener類型UML結構圖如下:
在這里插入圖片描述
1.4 初始化BeanFactory中定義的singleton對象

AbstractRefreshableApplicationContext:默認使用DefaultListableBeanFactory類型

AbstractRefreshableWebApplicationContext:面向web環境的ApplicationContext,主要涉及到ServletContext和ServletConfig

ServletContextAwareProcessor:

備注:將bean轉換為ServletContextAware類型,并設置對應ServletContext和ServletConfig參數

XmlWebApplicationContext:使用xml配置加載bean對象

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249640.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249640.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249640.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spark-streaming first insight

一、 Spark Streaming 構建在Spark core API之上&#xff0c;具備可伸縮&#xff0c;高吞吐&#xff0c;可容錯的流處理模塊。 1&#xff09;支持多種數據源&#xff0c;如Kafka&#xff0c;Flume&#xff0c;Socket&#xff0c;文件等&#xff1b; Basic sources: Sources dir…

DHCP服務器 出現的故障

系統版本&#xff1a;Windows Server 2008 R2 Standard 故障現象&#xff1a;近段時間&#xff0c;我們核心網絡DHCP服務器&#xff0c;總是發現有掉線重起現象&#xff0c;大約每10分鐘至30分鐘不定時會重起。 故障代碼&#xff1a;關鍵系統進程 C:\Windows\system32\lsass.ex…

雙親委派

雙親委派模式的工作原理的是:如果一個類加載器收到了類加載請求&#xff0c;它并不會自己先去加載&#xff0c;而是把這個請求委托給父類的加載器去執行&#xff0c;如果父類加載器還存在其父類加載器&#xff0c;則進一步向上委托&#xff0c;依次遞歸&#xff0c;請求最終將到…

程序設計入門-C語言基礎知識-翁愷-第六周:數組-詳細筆記(六)

目錄 第六章&#xff1a;數組6-1 數組6-2 數組計算6.3 課后習題第六章&#xff1a;數組 6-1 數組 題目&#xff1a;讓用戶輸入一組整數以-1結束輸入&#xff0c;算出這組數的平均值&#xff0c;并且輸出大于平均值的數。 我們需要記錄用戶所有輸入的數字才能在判斷出平均值后輸…

Vue學習【第六篇】:Vue-cli腳手架(框架)與實戰案例

環境搭建 安裝node 官網下載安裝包&#xff0c;傻瓜式安裝&#xff1a;https://nodejs.org/zh-cn/ 安裝cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org 安裝腳手架 cnpm install -g vue/cli 清空緩存處理 npm cache clean --force 項目的創建 創建項目 v…

Docker安裝配置教程

Docker安裝配置教程

Python學習第十六篇——異常處理

在實際中&#xff0c;很多時候時候&#xff0c;我們并不能保證我們所寫的程序是完美的。比如我們程序的本意是&#xff1a;用戶在輸入框內輸入數字&#xff0c;并進行后續數學運算&#xff0c;即使我們提醒了用戶需要輸入數字而不是文本&#xff0c;但是有時會無意或者惡意輸入…

cmd 常用命令

注&#xff1a;綠色的為比較常用的命令 命令名稱ASSOC 顯示或修改文件擴展名關聯。ATTRIB顯示或更改文件屬性。BREAK 設置或清除擴展式 CTRLC 檢查。CACLS顯示或修改文件的訪問控制列表(ACL)。BCDEDIT 設置啟動數據庫中的屬性以控制啟動加載。CALL從另一個批處理程序調用這一個…

js打字的效果

HTML代碼&#xff1a; <div id"box"></div> javascript代碼&#xff1a; var index 0; var word "8月6日美國的經濟“制裁”如約而至&#xff0c;特朗普在社交網站發文稱&#xff0c;對伊朗的制裁已經正式實施&#xff0c;他稱這是“有史以來最激…

遞歸函數實現二分查找法

最初版本&#xff1a; 改進版&#xff1a; 最終版本&#xff1a; 遞歸實現階乘&#xff1a; 轉載于:https://www.cnblogs.com/www-qcdwx-com/p/10399288.html

圖解LinkedHashMap原理

1 前言 LinkedHashMap繼承于HashMap&#xff0c;如果對HashMap原理還不清楚的同學&#xff0c;請先看上一篇&#xff1a;圖解HashMap原理 2 LinkedHashMap使用與實現 先來一張LinkedHashMap的結構圖&#xff0c;不要虛&#xff0c;看完文章再來看這個圖&#xff0c;就秒懂了…

02、體驗Spark shell下RDD編程

02、體驗Spark shell下RDD編程 1、Spark RDD介紹 RDD是Resilient Distributed Dataset&#xff0c;中文翻譯是彈性分布式數據集。該類是Spark是核心類成員之一&#xff0c;是貫穿Spark編程的始終。初期階段&#xff0c;我們可以把RDD看成是Java中的集合就可以了&#xff0c;在后…

CDH集群安裝配置(四)- mysql 的安裝

安裝mysql&#xff0c;并且創建相關的表&#xff08;只需要在chd1上面安裝而且需要root權限&#xff09;1.1 查看Centos自帶mysql是否已經安裝 yum list installed | grep mysql 卸載自帶mariadb# rpm -qa | grep mariadb mariadb-libs-5.5.41-2.el7_0.x86_64 # rpm -e --nodep…

EF另一個 SqlParameterCollection 中已包含 SqlParameter。

代碼&#xff1a; SqlParameter[] commandParameters new SqlParameter[]{new SqlParameter("CultID",filters.ParentID)};var result db.Database.SqlQuery<FM_PlantSolutions>("select s.* ,u.UserName as PrincipalName,isnull(ue.UserName,無) as E…

2019 GUDT RC 2 Problem C(題解)

原題 題目大意 這道題的背景是農夫和牛爬山,給出山的高度L,農夫會從山底以rF的速度爬山,中途不會休息,牛會從山底以rB的速度爬山,可以在休息站休息并吃草,在第i個休息站休息ti時間,牛可以吃t*ci的草,第i個休息站的高度為xi.農夫和牛同時出發,要求牛在不被農夫追上的同時吃最多的…

maven setting.xml 中文配置詳解(全配置)

<?xml version"1.0" encoding"UTF-8"?> <!--| 官方文檔: https://maven.apache.org/settings.html|| Maven 提供以下兩種 level 的配置:|| 1. User Level. 當前用戶獨享的配置, 通常在 ${user.home}/.m2/settings.xml 目錄下。 | …

String/Stringbuilder/StringBuffer

三個的運行速度&#xff1a;Stringbuilder>Stringbuffer>String String最慢是因為它是字符串常量&#xff0c;而其他兩個是字符串變量。其中stringbuilder是非線程安全的、stringbuffer是線程安全的Stringbuilder適用于單線程且數據量大的字符串操作Stringbuffer適用于多…

CCF 差分約束--201809再賣菜

問題描述 在一條街上有n個賣菜的商店&#xff0c;按1至n的順序排成一排&#xff0c;這些商店都賣一種蔬菜。   第一天&#xff0c;每個商店都自己定了一個正整數的價格。店主們希望自己的菜價和其他商店的一致&#xff0c;第二天&#xff0c;每一家商店都會根據他自己和相鄰商…

Express + Element-ui 實現圖片/文件上傳

使用第三方插件 formidable 處理表單數據/文件 Express 4 以前&#xff0c;我們通常使用 req.files 來對請求中的文件進行處理&#xff0c;但在 Express 4 中這種用法已經被拋棄&#xff0c;默認情況下 req.files 在 req 對象上不再可用。官方推薦我們使用第三方中間件。 在這里…