一个 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.介绍
- 七、编程语言