Spring的IoC容器管理一个或多个bean,这些bean是根据提供给容器的配置元数据(例如,以XML<bean/>
定义的形式)创建的。
在容器内部,这些bean定义被表示为BeanDefinition
对象,其中包含以下元数据(以及其他信息):
这种元数据转换为一组构成每个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容器中不一致的状态。