一、依赖注入形式
对于 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 办法或应用结构器办法来注入依赖对象,还有一种注入依赖对象的办法,就是应用注解。