日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Spring核心IOC的核心類解析

作者:Volunteer Technology 更新時間: 2022-09-25 編程語言

BeanFactory

BeanFactory是用于訪問Spring Bean容器的根接口,典型的工廠模式,用于生產Bean的一個Bean工廠,其提供了生產Bean所需的最基 本規則。

BeanFactory的所有方法:

?類的繼承圖:

BeanDefinition

功能

BeanDefinition是bean在spring中的描述,有了BeanDefinition我們就可以創建Bean,BeanDefinition是Bean在spring 中的定義形態 接下來我們看看BeanDefinition的相關接口與類.

方法

String: getBeanClassName: 返回當前bean definition定義的類名

ConstructorArgumentValues: getConstructorArgumentValues:返回bean的構造函數參數

String[]: getDependsOn:返回當前bean所依賴的其他bean的名稱

String: getFactoryBeanName: 返回factory bean的名稱

String: getFactoryMethodName: 返回工廠方法的名稱 BeanDefinition: getOriginatingBeanDefinition: 返回原始的BeanDefinition,如果不存在返回null

String: getParentName: 返回當前bean definition的父definition的名字

MutablePropertyValues: getPropertyValues: 返回一個用于新的bean實例上的屬性值

String: getScope: 返回當前bean的目標范圍

boolean: isAbstract: 當前bean是否是abstract,意味著不能被實例化

boolean: isLazyInit: bean是否是延遲初始化

boolean: isPrimary: bean是否為自動裝配的主要候選bean

boolean: isPrototype: bean是否是多實例

boolean: isSingleton: bean是否是單例

void: setAutowiredCandidate(boolean): 設置bean是否對其他bean是自動裝配的候選bean

void: setBeanClassName(String): 指定bean definition的類名

void: setDependsOn(String ...): 設置當前bean初始化所依賴的beans的名稱

void: setFactoryBeanName(String): 如果factory bean的名稱

void: setFactoryMethodName(String): 設置工廠的方法名

void: setLazyInit(boolean lazyInit): 設置是否延遲初始化

void: setParentName(String): 設置父definition的名稱

void: setPrimary(boolean): 設置是否主要的候選bean

void: setScope(String): 設置bean的范圍,如:單例,多實例

定義

BeanDefinition接口: 頂級基礎接口,用來描述Bean,里面存放Bean元數據,比如Bean類名、scope、屬性、構 造函數參數列表、依賴的bean、是否是單例類、是否是懶加載等一些列信息。

BeanMetadataElement接口:BeanDefinition元數據,返回該Bean的來源

AttributeAccessor接口:提供對BeanDefinition屬性操作能力,

AbstractBeanDefinition類:抽象類統一實現了BeanDefinition定義的一部分操作,可以說是定義了 BeanDefinition很多默認的屬性。 正是在AbstractBeanDefinition基礎上, Spring衍生出了一些列 BeaDefinition。 這里我們可以關注下重寫的equals(),hashcode(), toString()方法 此外initMethodName屬性,destroyMethodName 屬性, 這兩個屬性bean的生命周期有關,此處只提一句,后續講 解。 接下來。我們看看從AbstractBeanDefinition上衍生出來的幾個類 RootBeanDefinition: 代表一個xml,java Config來的BeanDefinition

ChildBeanDefinition: 從Spring2.5開始,ChildBeanDefinition已經不再使用,取而代之的是GenericBeanDefinition。

GenericBeanDefinition: spring2.5后注冊bean首選的是GenericBeanDefinition。GenericBeanDefinition 允許動態的設置父bean.GenericBeanDefinition可以作為RootBeanDefinition與ChildBeanDefinition的替代品。

AnnotatedBeanDefinition接口: 表示注解類型BeanDefinition。有兩個重要的屬性, AnnotationMetadata,MethodMetadata分別表示BeanDefinition的注解元信息和方法元信息 實現了此接口的 BeanDefinition可以獲取到注解元數據和方法元數據。 AnnotatedGenericBeanDefinition類: 表示@Configuration注解注釋的BeanDefinition類 ScannedGenericBeanDefinition類: 表示@Component、@Service、@Controller等注解注釋的Bean類 操作 動作也可分為兩種: 一種是針對自身的操作: 自提提供給外部的可以操作其本身的動作 另一種是外部對BeanDefinition 的操作

BeanDefinitionRegistry接口:具有增,查,刪BeanDefinition的能力。一次只能注冊一個BeanDefinition. 實現類SimpleBeanDefinitionRegistry,DefaultListableBeanFactory,GenericApplicationContext等 一般實現類里 都都有一個 private final Map beanDefinitionMap = new ConcurrentHashMap()來存儲 BeanDefinition.

BeanDefinitionReader接口: 既可以使用BeanDefinitionRegistry構造。也可以通過loadBeanDefinitions 把配置加載為多個BeanDefinition并注冊到BeanDefinitionRegistry中。 可以說是高效版本的 BeanDefinitionRegistry. 實現類有 XmlBeanDefinitionReader從xml中讀取BeanDefinition; PropertiesBeanDefinitionReader從Properties文件讀取BeanDefinition AnnotatedBeanDefinitionReader類 對帶有注解的BeanDefinition進行注冊 ClassPathBeanDefinitionScanner類: 可以掃描到@Component @Repository @Service @Controller 的BeanDefinition注冊到容器中。

其他形態

BeanDefinitionHolder: BeanDefinition包裝類。

Bean

Bean是我們需要的對象,是我們從spring內得到的結果,也就是對象實例

定義

從定義層面看.Bean其實就是我們需要的對象. 操作 我們來看看Bean在spring有哪些操作相關的接口或類。

SingletonBeanRegistry接口:與BeanDefinition的注冊相應的。Bean的操作也有一個類似的接口來操作 Bean.SingletonBeanRegistry接口提供了對Bean的注冊,獲取,存在性判斷等功能。 InitializingBean:對于實現 InitializingBean的Bean,它將執行 afterPropertiesSet(); 在所有的 bean 屬性被 設置之后。

InstantiationStrategy:提供 Bean實例化的策略接口,

DisposableBean:對于 實現了DisposableBean的Bean ,它將運行 destroy()在 Spring 容器釋放該 bean 之 后

FactoryBean: 生產Bean的Bean.

其他形態

BeanWrapper: 對Bean的包裝.BeanWrapper可以看作是一個從 BeanDefinition 到 Bean 過程中間的產物, 可以稱為”低級 bean“,在一般情況下,我們不會在實際項目中用到它。BeanWrapper 是 Spring 框架中重要的 組件類,它就相當于一個代理類,Spring 委托 BeanWrapper 完成 Bean 屬性的填充工作。在 bean 實例被 InstantiatioonStrategy 創建出來后,Spring 容器會將 Bean 實例通過 BeanWrapper 包裹起來,是通過 BeanWrapper.setWrappedInstance() 完成的

總結:

BeanDefinition是物料,Bean是成品,理解BeanDefinition與Bean的關系是理解spring的基礎。

事務

DataSourceTransactionManager:

?

原文鏈接:https://blog.csdn.net/weixin_46300935/article/details/127033551

欄目分類
最近更新