網(wǎng)站首頁 編程語言 正文
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
相關(guān)推薦
- 2023-12-16 IDEA中設(shè)置遠(yuǎn)程調(diào)試服務(wù)器上的程序
- 2022-04-17 <el-dropdown>按鈕點(diǎn)擊出來下拉菜單,點(diǎn)擊下拉菜單觸發(fā)事件
- 2022-07-11 Android?studio實(shí)現(xiàn)左右滑動(dòng)切換圖片_Android
- 2022-08-14 Shell腳本實(shí)現(xiàn)監(jiān)測(cè)文件變化的示例詳解_linux shell
- 2022-04-28 Go語言單元測(cè)試超詳細(xì)解析_Golang
- 2022-12-29 Kotlin數(shù)據(jù)存儲(chǔ)方式全面總結(jié)講解_Android
- 2022-09-23 Python文件目錄操作常用模塊的使用詳解_python
- 2023-03-19 一文掌握匯編語言?halt?命令_匯編語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支