一個 Spring IOC容器管理了一個或者更多的Bean,這些 Bean通過你提供給容器的Bean的定義來創建。比如:編寫在 XML 文件中的`<bean/>`元素。
在容器內部,這些Bean的定義對應于`BeanDefinition`對象,該對象所包含的元數據如下:
* 一個全限定類名:通常是被定義Bean的實現類。
* Bean的行為配置元素:Bean對象要表現的行為狀態(范圍、生命周期、回調函數等等)。
* 與此Bean一起工作的其他Bean的引用:這些引用也被稱為合作者或者依賴。
* 其它用于創建最新對象的配置:比如,管理連接池的Bean中,可以使用的連接數量或者連接池的大小限制。
這些元數據被轉換成屬性集,構成了Bean的定義。
表1.Bean的定義
| 屬性 | 解釋在... |
| --- | --- |
| class | [1.3.2.實例化Bean](1.3.2.實例化Bean.md) |
| name | [1.3.1.Bean的命名](1.3.1.Bean的命名.md) |
| scope | [1.5.Bean的范圍](1.5.Bean的范圍.md) |
| construtor arguments | [1.4.1.依賴注入](1.4.1.依賴注入.md) |
| properties | [1.4.1.依賴注入](1.4.1.依賴注入.md) |
| autowiring mode | [1.4.5.注入合作者](1.4.5.注入合作者.md) |
| lazy-initialization mode | [1.4.4.Bean的懶加載](1.4.4.Bean的懶加載.md) |
| initialization method | [1.6.1.生命周期回調函數](1.6.1.生命周期回調函數.md) |
| destruction method | [1.6.1.生命周期回調函數](1.6.1.生命周期回調函數.md) |
除了通過Bean的定義信息來創建對象外,`ApplicationContext`的實現類也允許用戶手動向容器中注冊已實例化的對象。這一操作可以通過訪問`ApplicationContext`的父類BeanFactory中的getBeanFactory方法來完成,該方法返回`BeanFactory `的實現 `DefaultListableBeanFactory`。`DefaultListableBeanFactory`支持通過`registerSingleton(..)`和`registerBeanDefinition(..)`來注冊Bean。然而,典型的應用一般只通過Bean的定義來創建Bean的實例。
> 為了使容器在自動注入和其他檢查階段能夠正確推斷Bean,手動提供的對象或者Bean的定義應該被盡早注冊。盡管在某種程度上,覆蓋已存在的元數據和單實例是支持的,但是在應用運行時向容器中注冊Bean是不嚴謹的,這可能會導致同時訪問容器異常,也可能會導致容器的狀態不一致。
- ---- 閱讀說明
- 一、核心技術
- 1.IOC容器
- 1.1.IOC 容器和 Bean 簡介
- 1.2.容器概覽
- 1.2.1.配置元數據
- 1.2.2.實例化容器
- 1.2.3.使用容器
- 1.3.Bean概覽
- 1.3.1.Bean的命名
- 1.3.2.實例化Bean
- 1.4.依賴
- 1.4.1.依賴注入
- 1.4.2.依賴配置詳情
- 1.4.5.注入合作者
- 1.4.4.Bean的懶加載
- 1.5.Bean的范圍
- 1.6.自定義Bean的特性
- 1.6.1.生命周期回調函數
- 1.7.繼承Bean定義
- 1.9.基于注解的容器配置
- 1.9.1.@Required
- 1.12.基于Java的容器配置
- 1.12.3.使用@Bean注解
- 1.15.ApplicationContext的附加功能
- 1.15.4.Web 應用中便捷的 ApplicationContext 實例
- 1.16.BeanFactory
- 2.資源
- 2.7.應用上下文和資源路徑
- 3.驗證、數據綁定以及類型轉換
- 3.5.Spring類型轉換
- 3.5.4.ConversionService API
- 5.基于 Spring 的面向切面編程
- 5.8.在 Spring 中使用 AspectJ
- 5.8.1.在 Spring 中使用 AspectJ 注入領域對象
- 二、測試
- 三、數據訪問
- 四、Web應用
- 五、Web響應式編程
- 六、集成
- 4.1.介紹
- 七、編程語言