4p命名空间和c命名空间
在通过构造方法或set
方法给bean
注入关联项时通常是通过constructor-arg
元素和property
元素来定义的。在有了p
命名空间和c
命名空间时我们可以简单的把它们当做bean
的一个属性来进行定义。
4.1p命名空间
使用p
命名空间时需要先声明使用对应的命名空间,即在beans
元素上加入xmlns:p="http://www.springframework.org/schema/p"
。下面先来看一个示例。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="world" class="com.app.World"/>
<!-- 通过set方法注入的传统的bean定义 -->
<bean id="hello1" class="com.app.Hello">
<property name="p1" value="v1"/>
<property name="p2" value="v2"/>
<property name="world" ref="world"/>
</bean>
<!-- 通过set方法注入的使用p命名空间的bean定义 -->
<bean id="hello2" class="com.app.Hello" p:p1="v1" p:p2="v2" p:world-ref="world"/>
</beans>
在上面示例中,id
为hello1
的bean
是传统的bean
定义,而id
为hello2
的bean
是基于p
命名空间的bean
定义。当传统的property
元素定义的value
是基础数据类型时,我们可以直接把property
元素对应的name
加上p
命名空间的前缀作为bean
的一个属性进行定义,对应的值就是原property
元素对应的value
。如上述示例中name
为“p1”
的property
使用p
命名空间后就变成了“p:p1”
;当传统的property
元素定义的是对其它bean
的关联时,我们可以直接把property
元素对应的name
加上“-ref”
,再加上p
命名空间的前缀作为bean
的一个属性进行定义,对应的值为原property
元素对应的ref
值,如上述示例中name
为“world”
的property
就是定义了对其它bean
的关联,使用p
命名空间后就变成了“p:world-ref”
。这里有一点需要注意的地方就是property
对应的是set
方法,而不是对应的属性,如name
为“world”
的property
实际上对应的是setWorld()
方法,这个时候不管对应的bean
是否真存在名为world
的属性;另一点需要注意的地方是使用p
命名空间时要注意以“-ref”
结尾的property
,这会导致Spring
以其前部分作为property
,因为“-ref”
会被Spring
作为关联的关键字。
4.2c命名空间
c
命名空间的用法和p
命名空间类似,其对应于constructor-arg
,即可以将constructor-arg
元素替换为bean
的一个以c
命名空间前缀开始的属性。使用c
命名空间之前也需要通过xmlns:c=”http://www.springframework.org/schema/c”
进行声明。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="world" class="com.app.World"/>
<!-- 传统的使用constructor-arg通过构造方法注入的bean定义 -->
<bean id="hello1" class="com.app.Hello">
<constructor-arg index="0" value="arg1"/>
<constructor-arg index="1" value="2"/><!-- arg2 -->
<constructor-arg index="2" ref="world"/><!-- arg3 -->
</bean>
<!-- 使用c命名空间通过构造方法注入的bean定义 -->
<bean id="hello2" class="com.app.Hello" c:arg1="c_arg1" c:arg2="2" c:arg3-ref="world"/>
</beans>
如上所示,c
命名空间的用法和p
命名空间的用法类似。对于通过构造方法注入原始类型的对象可以把对应的构造参数名称加上c
命名空间的前缀作为bean
的一个属性进行定义,对应的值即是构造参数的值;如果通过构造参数注入的是其它bean
的一个引用,则可将该构造参数名称加上“-ref”
,再加上c
命名空间的前缀作为该bean
的一个属性进行定义,对应的值为所关联bean
的id
或name
,如上述示例中的“c:arg3-ref”
。
需要注意的是直接把构造参数名称加上c
命名空间的前缀作为bean
的一个属性定义来替代对应的constructor-arg
只对以debug
方式编译的class
有效,因为对于非debug
方式编译的class
文件Spring
将无法获取到对应构造方法的参数名。对于这种情况我们可以直接使用构造方法参数的索引加上下划线“_”
前缀来代替对应的参数名,索引是从0开始的,如上面的示例以索引来代替时将是如下这个样子。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="world" class="com.app.World"/>
<!-- 传统的使用constructor-arg通过构造方法注入的bean定义 -->
<bean id="hello1" class="com.app.Hello">
<constructor-arg index="0" value="arg1"/>
<constructor-arg index="1" value="2"/><!-- arg2 -->
<constructor-arg index="2" ref="world"/><!-- arg3 -->
</bean>
<!-- 使用c命名空间并且是使用构造参数的索引作为属性来通过构造方法注入的bean定义 -->
<bean id="hello2" class="com.app.Hello" c:_0="c_arg1" c:_1="2" c:_2-ref="world"/>
</beans>
(注:本文是基于Spring4.1.0所写)
相关推荐
DIDependency Injection概念注入方式构造器注入**==Set注入==**测试pojo类:Bean注入:结果:p命名和c命名注入p命名空间注入:c命名空间注入 相关文章 跟着官网学spring—快速入门指南 跟着官网学Spring—构建...
快速入门HelloSpring编写代码编写一个Hello实体类编写Spring文件,命名为beans.xml测试结果以及总结IOC创建对象方式通过无参构造方法来创建User.javabeans.xml测试结果通过有参构造方法来创建UserT.javabeans.xml 有...
2.6. 验证管理器和命名空间 3. 示例程序 3.1. Tutorial示例 3.2. Contacts 3.3. LDAP例子 3.4. CAS例子 3.5. Pre-Authentication例子 4. Spring Security社区 4.1. 任务跟踪 4.2. 成为参与者 4.3. 更多...
2.6. 验证管理器和命名空间 3. 示例程序 3.1. Tutorial 示例 3.2. Contacts 3.3. LDAP 例子 3.4. CAS 例子 3.5. Pre-Authentication 例子 4. Spring Security 社区 4.1. 任务跟踪 4.2. 成为参与者...
《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...
2.6. 验证管理器和命名空间 3. 示例程序 3.1. Tutorial示例 3.2. Contacts 3.3. LDAP例子 3.4. CAS例子 3.5. Pre-Authentication例子 4. Spring Security社区 4.1. 任务跟踪 4.2. 成为参与者 ...
————————————— Spring Boot,Freemarker 编辑好格式的Word文档 1份 将Word文档里需要填充的地方加上占位符${xxxx} 将编辑好占位符的文档另存为XML格式Word 2003 XML文档,并重命名,用英文命名 利用...
《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...
———————————————— 版权声明:本文为CSDN博主「weixin_43594111」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:...
Spring框架技术—— 容器和bean的基本原理本章内容知识点掌握程度 难易程度传统组件调用方式理解理解为何使用IoC理解掌握理解Bean的定义和命名掌握Be
JNDITest.zip //13.JNDI命名和目录服务开发样例 JavaMailTest.zip //15.JavaMail邮件服务开发样例 WebServiceTest.zip //16.Web服务开发样例 DroolsTest.zip //20.Drool规则引擎开发样例 AcegiTest.zip ...
JNDITest.zip //13.JNDI命名和目录服务开发样例 JavaMailTest.zip //15.JavaMail邮件服务开发样例 WebServiceTest.zip //16.Web服务开发样例 DroolsTest.zip //20.Drool规则引擎开发样例 AcegiTest.zip ...
JNDITest.zip //13.JNDI命名和目录服务开发样例 JavaMailTest.zip //15.JavaMail邮件服务开发样例 WebServiceTest.zip //16.Web服务开发样例 DroolsTest.zip //20.Drool规则引擎开发样例 AcegiTest.zip ...
JNDITest.zip //13.JNDI命名和目录服务开发样例 JavaMailTest.zip //15.JavaMail邮件服务开发样例 WebServiceTest.zip //16.Web服务开发样例 DroolsTest.zip //20.Drool规则引擎开发样例 AcegiTest.zip ...
4.1.3 XML命名空间 31 4.2 XML能用来干什么 32 4.3 用DTD验证XML文档 33 4.4 用Schema验证XML文档 35 4.4.1 使用XML Schema 35 4.4.2 Schema的语法 37 4.5 用JAXP读写XML 44 4.6 Java EE中的JAXB 55...
11 5.2 运行环境及部署 11 5.2.1 硬件环境 11 5.2.2 软件环境 11 5.2.3 网络环境 11 5.3 命名及约定 12 5.3.1 接口方法命名 12 5.3.2 JSP页面命名 12 6 详细设计 13 6.1 业务流程图 13 7 数据库设计 16 7.1 概念设计...
目录1. 环境说明与搭建2....如果不同环境需要有不同的配置,则这些配置需要独立出来,放在src\main\resources目录下的对应环境的文件夹代码结构 com.trade.trade按照功能模块进行命名 |———— remote最终
由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为blog 的开发工具。 为了增加系统的...
动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和...
二、Extjs命名空间的定义 17 三、Extjs OOP 17 四、配置(config)选项 19 五、Ext.apply()和Ext.applyIf() 20 六、小结 21 第四章:消息框 22 一、话说消息框 22 二、最简单的消息框——提示框 23 三、输入框 23 四、...