概述
Spring IoC容器管理一个或多个bean。这些bean是由您提供给容器的元数据配置创建的(例如,XML 定义的形式)。
在容器内部,这些bean定义表示为BeanDefinition对象,其中包含(其他信息)以下元数据
限定包类名称: 通常,定义的bean的实际实现类。
bean行为配置元素, 定义Bean的行为约束(例如作用域,生命周期回调等等)
bean需要引用其他bean来完成工作. 这些引用也称为协作或依赖关系.
其他配置用于新对象的创建,例如使用bean的数量来管理连接池,或者限制池的大小。
以下是每个bean定义的属性:
Class | 实例化Bean |
Name | 命名Bean |
Scope | Bean 的作用域 |
Constructor arguments | 依赖注入 |
Properties | 依赖注入 |
Autowiring mode | 自动装配 |
Lazy initialization mode | 懒加载Bean |
Initialization method | 初始化方法回调 |
Destruction method | 销毁方法回调 |
除了bean定义包含如何创建特定的bean的信息外,ApplicationContext实现还允许用户在容器中注册现有的、已创建的对象。 通过getBeanFactory()
访问到返回值为DefaultListableBeanFactory的实现的ApplicationContext的BeanFactory DefaultListableBeanFactory支持通过registerSingleton(..)和
registerBeanDefinition(..)方法来注册对象。 然而,典型的应用程序只能通过元数据配置来定义bean。
为了让容器正确推断它们在自动装配和其它内置步骤,需要尽早注册Bean的元数据和手动使用单例的实例。虽然覆盖现有的元数据和现有的单例实例在某
种程度上是支持的, 但是新bean在运行时(同时访问动态工厂)注册官方并不支持,可能会导致并发访问异常、bean容器中的不一致状态,或者两者兼
有。