spring——Spring Bean属性注入——短命名空间注入——p 命名空间注入(转载)
短命名空间注入
我们在通过构造函数或 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 的类,代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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() 方法,控制台输出如下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2021-04-17 自动化——测试开发进阶——flask——flask-request对象
2021-04-17 自动化——测试开发进阶——flask——flask为路由指定HTTP方法
2021-04-17 自动化——测试开发进阶——flask——flask变量规则与url构建