網站首頁 編程語言 正文
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
相關推薦
- 2023-08-16 數據選擇器 uni-data-checkbox,獲取value值
- 2022-04-04 css:動畫 小米官網盒子陰影 心跳動畫
- 2024-04-02 Centos無法獲取IP報No suitable device found for this con
- 2022-12-09 C++哈希表之閉散列方法的模擬實現詳解_C 語言
- 2023-02-12 JetpackCompose?Scaffold組件使用教程_Android
- 2022-05-08 ASP.NET?MVC緩存過濾器用法_實用技巧
- 2023-10-12 nvm的作用、下載、使用、以及Mac使用時遇到commond not found:nvm如何解決
- 2022-08-11 python?tkinter中的錨點(anchor)問題及處理_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支