`
234390216
  • 浏览: 10187880 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:460526
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1771209
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1395026
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:393711
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:678026
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:529035
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1178312
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:461003
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:149931
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:66675
社区版块
存档分类
最新评论

Spring(04)——p命名空间和c命名空间

阅读更多

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>

在上面示例中,idhello1bean是传统的bean定义,而idhello2bean是基于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的一个属性进行定义,对应的值为所关联beanidname,如上述示例中的“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所写)

 

0
1
分享到:
评论

相关推荐

    Spring从入门到入土——依赖注入(DI)

    DIDependency Injection概念注入方式构造器注入**==Set注入==**测试pojo类:Bean注入:结果:p命名和c命名注入p命名空间注入:c命名空间注入 相关文章 跟着官网学spring—快速入门指南 跟着官网学Spring—构建...

    Spring从入门到入土——快速上手Spring

    快速入门HelloSpring编写代码编写一个Hello实体类编写Spring文件,命名为beans.xml测试结果以及总结IOC创建对象方式通过无参构造方法来创建User.javabeans.xml测试结果通过有参构造方法来创建UserT.javabeans.xml 有...

    SpringSecurity 3.0.1.RELEASE.CHM

    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. 更多...

    Spring Security-3.0.1中文官方文档(翻译版)

    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.3.x企业应用开发实战(完整版).part2

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    Spring Security 中文教程.pdf

    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. 成为参与者 ...

    Java项目中利用Freemarker模板引擎导出--生成Word文档

    ————————————— Spring Boot,Freemarker 编辑好格式的Word文档 1份 将Word文档里需要填充的地方加上占位符${xxxx} 将编辑好占位符的文档另存为XML格式Word 2003 XML文档,并重命名,用英文命名 利用...

    Spring3.x企业应用开发实战(完整版) part1

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    Springboot源码流程图

    ———————————————— 版权声明:本文为CSDN博主「weixin_43594111」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:...

    第2章 容器和bean的基本原理1

    Spring框架技术—— 容器和bean的基本原理本章内容知识点掌握程度 难易程度传统组件调用方式理解理解为何使用IoC理解掌握理解Bean的定义和命名掌握Be

    java高手真经 高级编程卷 卷4(4卷)

    JNDITest.zip //13.JNDI命名和目录服务开发样例 JavaMailTest.zip //15.JavaMail邮件服务开发样例 WebServiceTest.zip //16.Web服务开发样例 DroolsTest.zip //20.Drool规则引擎开发样例 AcegiTest.zip ...

    java高手真经 高级编程卷 光盘内容 卷1(4卷)

    JNDITest.zip //13.JNDI命名和目录服务开发样例 JavaMailTest.zip //15.JavaMail邮件服务开发样例 WebServiceTest.zip //16.Web服务开发样例 DroolsTest.zip //20.Drool规则引擎开发样例 AcegiTest.zip ...

    java高手真经 高级编程卷 卷3(4卷)

    JNDITest.zip //13.JNDI命名和目录服务开发样例 JavaMailTest.zip //15.JavaMail邮件服务开发样例 WebServiceTest.zip //16.Web服务开发样例 DroolsTest.zip //20.Drool规则引擎开发样例 AcegiTest.zip ...

    java高手真经 高级编程卷 卷2(4卷)

    JNDITest.zip //13.JNDI命名和目录服务开发样例 JavaMailTest.zip //15.JavaMail邮件服务开发样例 WebServiceTest.zip //16.Web服务开发样例 DroolsTest.zip //20.Drool规则引擎开发样例 AcegiTest.zip ...

    从Java走向Java+EE+.rar

    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...

    电子商城系统设计实习报告.doc

    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 概念设计...

    soa-seed:这是SOA的种子项目,用于JavaWeb开发的spring和maven

    目录1. 环境说明与搭建2....如果不同环境需要有不同的配置,则这些配置需要独立出来,放在src\main\resources目录下的对应环境的文件夹代码结构 com.trade.trade按照功能模块进行命名 |———— remote最终

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为blog 的开发工具。 为了增加系统的...

    asp.net知识库

    动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和...

    轻松搞定Extjs_原创

    二、Extjs命名空间的定义 17 三、Extjs OOP 17 四、配置(config)选项 19 五、Ext.apply()和Ext.applyIf() 20 六、小结 21 第四章:消息框 22 一、话说消息框 22 二、最简单的消息框——提示框 23 三、输入框 23 四、...

Global site tag (gtag.js) - Google Analytics