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

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Spring核心IOC的核心類解析

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

BeanFactory

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

BeanFactory的所有方法:

?類的繼承圖:

BeanDefinition

功能

BeanDefinition是bean在spring中的描述,有了BeanDefinition我們就可以創(chuàng)建Bean,BeanDefinition是Bean在spring 中的定義形態(tài) 接下來我們看看BeanDefinition的相關(guān)接口與類.

方法

String: getBeanClassName: 返回當(dāng)前bean definition定義的類名

ConstructorArgumentValues: getConstructorArgumentValues:返回bean的構(gòu)造函數(shù)參數(shù)

String[]: getDependsOn:返回當(dāng)前bean所依賴的其他bean的名稱

String: getFactoryBeanName: 返回factory bean的名稱

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

String: getParentName: 返回當(dāng)前bean definition的父definition的名字

MutablePropertyValues: getPropertyValues: 返回一個(gè)用于新的bean實(shí)例上的屬性值

String: getScope: 返回當(dāng)前bean的目標(biāo)范圍

boolean: isAbstract: 當(dāng)前bean是否是abstract,意味著不能被實(shí)例化

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

boolean: isPrimary: bean是否為自動(dòng)裝配的主要候選bean

boolean: isPrototype: bean是否是多實(shí)例

boolean: isSingleton: bean是否是單例

void: setAutowiredCandidate(boolean): 設(shè)置bean是否對(duì)其他bean是自動(dòng)裝配的候選bean

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

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

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

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

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

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

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

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

定義

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

BeanMetadataElement接口:BeanDefinition元數(shù)據(jù),返回該Bean的來源

AttributeAccessor接口:提供對(duì)BeanDefinition屬性操作能力,

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

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

GenericBeanDefinition: spring2.5后注冊(cè)bean首選的是GenericBeanDefinition。GenericBeanDefinition 允許動(dòng)態(tài)的設(shè)置父bean.GenericBeanDefinition可以作為RootBeanDefinition與ChildBeanDefinition的替代品。

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

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

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

其他形態(tài)

BeanDefinitionHolder: BeanDefinition包裝類。

Bean

Bean是我們需要的對(duì)象,是我們從spring內(nèi)得到的結(jié)果,也就是對(duì)象實(shí)例

定義

從定義層面看.Bean其實(shí)就是我們需要的對(duì)象. 操作 我們來看看Bean在spring有哪些操作相關(guān)的接口或類。

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

InstantiationStrategy:提供 Bean實(shí)例化的策略接口,

DisposableBean:對(duì)于 實(shí)現(xiàn)了DisposableBean的Bean ,它將運(yùn)行 destroy()在 Spring 容器釋放該 bean 之 后

FactoryBean: 生產(chǎn)Bean的Bean.

其他形態(tài)

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

總結(jié):

BeanDefinition是物料,Bean是成品,理解BeanDefinition與Bean的關(guān)系是理解spring的基礎(chǔ)。

事務(wù)

DataSourceTransactionManager:

?

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

欄目分類
最近更新