7.7 创建Bean的3种方式
在大多数情况下, Spring
容器直接通过new
关键字调用构造器来创建Bean
实例,而clas
属性指定了Bean
实例的实现类。因此,<bean
.元素必须指定Bean
实例的class
属性,但这并不是实例化Bean
的唯一方法.Spring
支持使用如下方式来创建Bean
:
- 调用构造器创建
Bean
。 - 调用静态工厂方法创建
Bean
。 - 调用实例工厂方法创建
Bean
。
7.7.1 使用构造器创建Bean实例
使用构造器来创建Bean
实例是最常见的情况,如果不采用构造注入, Spring
底层会调用Bean
类的无参数构造器来创建实例,因此要求该Bean
类提供无参数的构造器。在这种情况下, class
元素是必需的(除非采用继承), class
属性的值就是Bean
实例的实现类。
采用设值注入时
如果采用设值注入, Spring
容器将使用默认的构造器来创建Bean
实例, Spring
对Bean
实例的所有属性执行默认初始化,即:
- 所有基本类型的值初始化为
0
或false
; - 所有引用类型的值初始化为
null
;
接下来, BeanFactory
会根据配置文件决定依赖关系,先实例化被依赖的Bean
实例,然后为Bean
注入依赖关系,最后将一个完整的Bean
实例返回给程序。
采用构造注入时
如果采用构造注入,则要求配置文件为<bean>
元素添加<constructor-arg>
子元素,每个<constructor-arg>
子元素配置一个构造器参数。 Spring
容器将使用带对应参数的构造器来创建Bean
实例, Spring
调用构造器传入的参数即可用于初始化Bean
的实例变量,最后也将一个完整的Bean
实例返回给程序。