一、依赖注入形式
对于Spring配置一个bean时,如果须要给该bean提供一些初始化参数,则须要通过依赖注入形式,所谓的依赖注入就是通过Spring将bean所须要的一些参数传递到bean实例对象的过程
Spring的依赖注入有3种形式:
·应用属性的setter办法注入 ,这是最罕用的形式;
·应用结构器注入;
·应用Filed注入(用于注解形式)。
1、应用属性注入
属性注入即通过setXxx()办法注入Bean的属性值或依赖对象,因为属性注入形式具备可选择性和灵活性高的长处,因而属性注入是理论利用中最常采纳的注入形式。
属性注入要求Bean提供一个默认的构造函数,并为须要注入的属性提供对应的Setter办法。
属性注入原理:Spring先调用Bean的默认构造函数实例化Bean对象,而后通过反射的形式调用Setter办法注入属性值。
Car类中定义了3个属性,并别离提供了对应的Setter办法。(注:默认构造函数是不带参的构造函数。Java语言规定如果类中没有定义任何构造函数,则JVM主动为其生成一个默认的构造函数。反之,如果类中显示定义了构造函数,则JVM不会为其生成默认的构造函数。所以假如Car类中显示定义了一个带参的构造函数,如public Car(String brand),则须要同时提供一个默认构造函数public Car(),否则应用属性注入时将抛出异样。)
在上述代码中配置了一个Bean,并为该Bean的3个属性提供了属性值。具体来说,Bean的每一个属性对应一个<property>标签,name为属性的名称,在Bean实现类中领有与其对应的Setter办法:maxSpeed对应setMaxSpeed(),brand对应setBrand()。
须要指出的是:Spring只会查看Bean中是否有对应的Setter办法,至于Bean中是否有对应的属性变量则不做要求。例如配置文件中<property name="brand"/>的属性配置项仅要求Car类中领有setBrand()办法,但Car类不肯定要领有brand成员变量。
2、构造函数注入
构造函数注入是除属性注入之外的另一种罕用的注入形式,它保障一些必要的属性在Bean实例化时就失去设置,并且确保了Bean实例在实例化后就能够应用。
应用形式:
第一,在类中,不必为属性设置setter办法,然而须要生成该类带参的构造方法。
第二,在配置文件中配置该类的bean,并配置结构器,在配置结构器中用到了<constructor-arg>节点,该节点有四个属性:
· index是索引,指定注入的属性,从0开始;
· type是指该属性所对应的类型;
· ref 是指援用的依赖对象;
· value 当注入的不是依赖对象,而是根本数据类型时,就用value;
3、应用字段(Filed)注入(用于注解形式)
除了下面讲到的应用属性的setter办法或应用结构器办法来注入依赖对象,还有一种注入依赖对象的办法,就是应用注解。