日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring-beans模块分析

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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對象

總結

以上是生活随笔為你收集整理的spring-beans模块分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。