7.3 bean概览
优质
小牛编辑
123浏览
2023-12-01
7.3 bean概览
Spring的IoC容器管理一个或多个bean,这些bean是根据提供给容器的配置元数据(例如,以XML<bean/>
定义的形式)创建的。
在容器内部,这些bean定义被表示为BeanDefinition
对象,其中包含以下元数据(以及其他信息):
- 一个带完整包名的类名:通常是被定义的bean的实现类。
- 配置bean行为的元素,这些元素说明了bean在容器中如何工作(作用域、生命周期回调等等)。
- 到为该bean工作的其他bean的引用,这些引用也被称为协作者或依赖。
- 在新创建的对象中设置的其他配置,例如,管理连接池的bean中使用的连接数或池的大小限制。
这种元数据转换为一组构成每个bean定义的属性。
Table 7.1. The bean definition
属性 | 释义章节 |
---|---|
class | 7.3.2 bean的实例化 |
name | 7.3.1 bean的命名 |
scope | 7.5 bean的作用域 |
constructor arguments | 7.4.1 依赖注入 |
properties | 7.4.1 依赖注入 |
autowiring mode | 7.4.5 协作对象的自动绑定 |
lazy-initialization mode | 7.4.4 延迟初始化的bean |
initialization method | 初始化回调 |
destruction method | 析构回调 |
除了内含有关如何创建一个特定bean的信息的bean定义外,ApplicationContext
还允许用户注册在容器外已经创建的对象。这是通过getBeanFactory()
方法访问ApplicationContext的BeanFactory来完成的,该方法返回BeanFactory的实现类DefaultListableBeanFactory
。DefaultListableBeanFactory
通过registerSingleton(..)
方法和registerBeanDefinition(..)
方法支持这种注册。然而,典型的应用程序仅使用通过元数据bean定义所定义的bean。
bean的元数据和手动提供的单例对象需要尽早注册,以便容器在自动绑定和其他自检过程中能正确地推断出它们。虽然在一定程度上支持覆盖已存在的元数据及单例对象,但是在运行时注册新的bean(同时实时访问factory)并不被正式地支持,并且可能导致并发访问异常和/或bean容器中不一致的状态。