Spring 的属性注入
Spring 的属性注入,我们可以理解成之前说过的 DI (依赖注入)。
注入方式
对于类成员变量,注入方式有三种:
- 构造函数注入
- 属性 setter 注入
- 接口注入
spring 支持前两种注入方式
1. 构造方法注入
- 通过构造方法注入 Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用
- 构造器注入在 ``` 元素里声明的属性
举个例子:
2. set 方法注入
- 使用 set 方法注入,在 Spring 配置文件中,通过 设置注入的属性
举个例子:
其中:
ref 用来引入其他 bean 的 id 或 name
普通类型的值使用 value
对象类型的值使用 ref
3. p 名称空间注入
- 使用 p 命名空间
- 为了简化 XML 文件配置,Spring 从 2.5 开始引入一个新的 p 名称空间
p:<属性名>="xxx"
引入常量值p:<属性名>-ref="xxx"
引入其他 Bean 对象
举个例子:
注意:
如果使用 p 名称空间注入,我们需要在 xml 文件开头的加入一句:xmlns:p="http://www.springframework.org/schema/p"
表示引入 p 名称空间注入方式。
4. SpEL 注入
- SpEL:spring expression language,spring 表达式语言,对依赖注入进行简化
- 语法:#{表达式}
<bean id="" value="#{表达式}">
SpEL 表达式语言:
语法:#{}#{'hello'}:使用字符串#{topicId3}:使用另一个 bean#{topicId4.content.toUpperCase()}:使用指定名属性,并使用方法#{T(java.lang.Math).PI}:使用静态字符或方法
举个例子:
5. 复杂类型的属性注入
- 数组类型的属性注入
- List 集合类型的属性注入
- Set 集合类型的属性注入
- Map 集合类型的属性注入
- Properties 类型的属性注入
举个例子:
aaa bbb ccc
111 222 333 ddd eee fff root 1234
复杂类型的属性注入,主要是在 Spring 整合其他框架的时候,会比较常用到。