Spring Framework:4.3.14.RELEASE
本文主要是论述 Spring Framework 依赖注入。
依赖注入主要可以分为两类:
- 基于构造函数的依赖注入
- 基于Setter方法的依赖注入
基于构造函数的依赖注入
在 bean 标签内通过使用 constructor-arg 子标签进行构造函数的依赖注入。
- value 属性:构造函数参数的值
- type 属性:构造函数参数的类型
- index 属性:构造函数参数的索引
创建一个 Car 类,并重载构造函数:
1 |
|
使用如下构造函数注入:
1 | public Car(String brand, double price, int maxSpeed) { |
1 | <bean id="smart" class="com.example.spring.Car"> |
如果按如下方式注入:
1 | <bean id="bmw" class="com.example.spring.Car"> |
会选择哪个构造函数:
1 | public Car(String brand, double price) { |
故此时可通过 type 属性进行明确指定:
1 | <bean id="audi" class="com.example.spring.Car"> |
也可以通过 index 属性进行指定:
1 | <bean id="ford" class="com.example.spring.Car"> |
官方推荐使用构造函数注入,可以确保依赖项不为空
但是构造函数参数过多时,不合适
基于Setter方法的依赖注入
在 bean 标签内通过使用 property 子标签进行 Setter 方法的依赖注入。
- name 属性:Bean 中的属性名称
- value 属性:Bean 中的属性的属性值
- value 子标签:等同于 value 属性
- ref 属性:Bean 中的引用属性
1 | <bean id="user" class="com.example.spring.User"> |
或
1 | <bean id="user" class="com.example.spring.User"> |
或
1 | <bean id="foo" class="com.example.spring.Foo"> |
基于 Setter 方法的依赖注入可以在 Setter 方法上添加 @Required 注解标识该属性是必须注入的依赖项:
1 | import org.springframework.beans.factory.annotation.Required; |
上述示例中,若进行 Setter 注入时,required 属性不注入则会提示错误
基于 Setter 方法的依赖注入是最常用的依赖注入方式
基于 Setter 方法的依赖注入可以让依赖项可控
并且基于基于构造函数的依赖注入和基于 Setter 方法的依赖注入可以同时使用
代码请参考example-04:
lxmuse-spring-example-04