p命名空间和c命名空间
4 p命名空间和c命名空间 4.1 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.2 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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ios – 没有调用previewActionItems(强制触摸动作)
- 许多数据图表/曲线图控件
- ruby-on-rails – RSpec 1.3.3 Rails 2.3.9 Webrat 0.7.3“
- KeyMob聚合-新一代的移动广告聚合平台!
- extjs4下datefield+timefield组成datetimefield
- 类和正则表达
- c# – string.Format忽略NumberFormatInfo?
- 测试驱动开发 ―― 一种真正的工程化开发实践 (转载自孙鸣、
- stage.width|stage.height|stage.stageWidth|stage.stageHe
- 关于ajaxForm 和ckeditor连用可是提交的时候不能够获得cked