1前言
2基本原理
3IOC容器
4Bean
在Spring-Framework技术框架中,Bean即Java实例化对象,IOC容器负责管理这些用于业务应用处理的bean。Bean的定义与创建过程也是IOC容器的定义与创建过程,其步骤包括定义bean对应的配置元数据、根据配置元数据执行bean的实例化,而类BeanDefinition是用于定义bean的,IOC容器根据类BeanDefinition的定义实例化每个bean,其定义包括的基本信息如下所示:
|
4.1Bean定义
在Spring-Framework技术框架中,类BeanDefinition是bean的基本定义,与bean的配置元数据一一对应,其定义的属性类型(在后续章节中详细描述)如下所示:
类 定义bean对应的Java类,IOC容器负责实例化,是IOC容器装载的基本单元 |
命名 定义bean在IOC容器中的唯一标识,每个bean对应一个或者多个唯一标识,例如,ID、名称、别名 |
作用域 定义bean的创建方式、定义bean的作用范围、定义bean的生命周期 |
构造函数参数 定义bean的引用与依赖,使用构造函数方式创建bean,以构造函数参数的方式传入 |
属性 定义bean的引用与依赖,以setter方法参数的方式传入 |
自动绑定依赖 定义bean的引用与依赖,根据依赖项的名称、类型自动绑定依赖 |
懒初始化模式 定义实例化bean的创建方式,是一个种节约资源的设计模式,在需要使用bean的时候,再执行bean的实例化 |
初始化方法 定义bean所有的依赖项设置完成之后,执行初始化的方法 |
IOC容器被销毁的回调方法 定义当IOC容器被销毁删除之后,回调bean的方法 |
4.2Bean命名
用户可以使用属性id或者属性name定义bean的名称,其命名的规则与通常的编程规范保持一致,例如,首字母小写结合驼峰写法,多个名称可以使用逗号或者分号分隔。用户也可以对bean定义多个别名,每个别名应用与不同的子系统、子模块,这种定义方式的好处是有利于改善代码的可读性、不容易混淆名称、不会发生命名冲突,如下所示:
如上图所示,其中myApp-dataSource对应的名称是共享数据源,subsystemA-dataSource、subsystemB-dataSource对应不同的别名,是对共享数据源的引用,因此,可以在A、B两个子系统中分别使用对应的别名访问共享数据源,也可以直接使用共享数据源的名称。
4.3Bean实例化
Bean实例化是创建一个Java类实例对象,主要是使用bean的构造函数、使用工厂静态方法、使用工厂实例方法。
bean的构造函数,创建一个简单无参数、无依赖的bean实例:
使用工厂静态方法,创建一个简单的服务类实例:
使用工厂实例方法,创建多个服务类实例: