短命名空间注入
我们在通过构造函数或 setter 方法进行属性注入时,通常是在 <bean> 元素中嵌套 <property> 和 <constructor-arg> 元素来实现的。这种方式虽然结构清晰,但书写较繁琐。
Spring 框架提供了 2 种短命名空间,可以简化 Spring 的 XML 配置,如下表。
短命名空间 | 简化的 XML 配置 | 说明 |
---|---|---|
p 命名空间 | <bean> 元素中嵌套的 <property> 元素 | 是 setter 方式属性注入的一种快捷实现方式 |
c 命名空间 | <bean> 元素中嵌套的 <constructor> 元素 | 是构造函数属性注入的一种快捷实现方式 |
p 命名空间注入
p 命名空间是 setter 方式属性注入的一种快捷实现方式。通过它,我们能够以 bean 属性的形式实现 setter 方式的属性注入,而不再使用嵌套的 <property> 元素,以实现简化 Spring 的 XML 配置的目的。
首先我们需要在配置文件的 <beans> 元素中导入以下 XML 约束。
- xmlns:p="http://www.springframework.org/schema/p"
在导入 XML 约束后,我们就能通过以下形式实现属性注入。
- <bean id="Bean 唯一标志符" class="包名+类名" p:普通属性="普通属性值" p:对象属性-ref="对象的引用">
使用 p 命名空间注入依赖时,必须注意以下 3 点:
- Java 类中必须有 setter 方法;
- Java 类中必须有无参构造器(类中不包含任何带参构造函数的情况,无参构造函数默认存在);
- 在使用 p 命名空间实现属性注入前,XML 配置的 <beans> 元素内必须先导入 p 命名空间的 XML 约束。
示例
下面我们通过一个简单的实例,演示下如何通过 p 命名空间实现属性注入。
1. 参考《第一个 Spring程序》,新建一个名为 my-spring-demo6 的 Java 项目。
2. 在 net.biancheng.c 包中,创建一个名为 Dept 的类,代码如下。
3. 在 net.biancheng.c 包下,创建一个名为 Employee 的类,代码如下。
package net.biancheng.c; public class Employee { //员工编号 private String empNo; //员工姓名 private String empName; //部门信息 private Dept dept; public void setEmpNo(String empNo) { this.empNo = empNo; } public void setEmpName(String empName) { this.empName = empName; } public void setDept(Dept dept) { this.dept = dept; } public Dept getDept() { return dept; } @Override public String toString() { return "Employee{" + "empNo='" + empNo + '\'' + ", empName='" + empName + '\'' + ", dept=" + dept + '}'; } }
4. 在 src 目录下创建 Spring 配置文件 Beans.xml,配置如下。
5. 在 net.biancheng.c 包下,创建一个名为 MainApp 的类,代码如下。
6. 执行 MainApp 类中的 main() 方法,控制台输出如下。