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的实现类DefaultListableBeanFactoryDefaultListableBeanFactory通过registerSingleton(..)方法和registerBeanDefinition(..)方法支持这种注册。然而,典型的应用程序仅使用通过元数据bean定义所定义的bean。

bean的元数据和手动提供的单例对象需要尽早注册,以便容器在自动绑定和其他自检过程中能正确地推断出它们。虽然在一定程度上支持覆盖已存在的元数据及单例对象,但是在运行时注册新的bean(同时实时访问factory)并不被正式地支持,并且可能导致并发访问异常和/或bean容器中不一致的状态。


书籍推荐