c 命名空间注入
c 命名空间是构造函数注入的一种快捷实现方式。通过它,我们能够以 <bean> 属性的形式实现构造函数方式的属性注入,而不再使用嵌套的 <constructor-arg> 元素,以实现简化 Spring 的 XML 配置的目的。
首先我们需要在配置文件的 <beans> 元素中导入以下 XML 约束。
- xmlns:c="http://www.springframework.org/schema/c"
在导入 XML 约束后,我们就能通过以下形式实现属性注入。
- <bean id="Bean 唯一标志符" class="包名+类名" c:普通属性="普通属性值" c:对象属性-ref="对象的引用">
使用 c 命名空间注入依赖时,必须注意以下 2 点:
- Java 类中必须包含对应的带参构造器;
- 在使用 c 命名空间实现属性注入前,XML 配置的 <beans> 元素内必须先导入 c 命名空间的 XML 约束。
示例
下面我们通过一个简单的实例,演示下如何通过 c 命名空间实现属性注入。
1. 修改 Dept 中的代码,添加一个有参构造函数。
package net.biancheng.c; public class Dept { //部门编号 private String deptNo; //部门名称 private String deptName; public Dept(String deptNo, String deptName) { this.deptNo = deptNo; this.deptName = deptName; } @Override public String toString() { return "Dept{" + "deptNo='" + deptNo + '\'' + ", deptName='" + deptName + '\'' + '}'; } }
2. 修改 Employee 中的代码,添加一个有参构造函数。
package net.biancheng.c; public class Employee { //员工编号 private String empNo; //员工姓名 private String empName; //部门信息 private Dept dept; public Employee(String empNo, String empName, Dept dept) { this.empNo = empNo; this.empName = empName; this.dept = dept; } @Override public String toString() { return "Employee{" + "empNo='" + empNo + '\'' + ", empName='" + empName + '\'' + ", dept=" + dept + '}'; } }
3. 修改 Beans.xml 中的配置,使用 c 命名空间实现属性注入。
4. 重新执行 MainApp 中的 main() 方法,控制台输出如下。