给XML配置文件"减肥"的另一个选择就是使用p名称空间,从 2.0开始,Spring支持使用名称空间的可扩展配置格式。这些名称空间都是基于一种XML Schema定义。事实上,我们所看到的所有bean的配置格式都是基于一个 XML Schema文档。

特定的名称空间并不需要定义在一个XSD文件中,它只在Spring内核中存在。我们所说的p名称空间就是这样,它不需要一个schema定义,与我们前面采用<property/>元素定义bean的属性不同的是,当我们采用了p名称空间,我们就可以在bean元素中使用属性(attribute)来描述bean的property值。

下面的两段XML配置文件中都是用来定义同一个bean:一个采用的是标准的XML格式,一个是采用p名称空间。

<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-2.5.xsd"> <bean name="classic" class="com.example.ExampleBean">
<property name="email" value="foo@bar.com/>
</bean> <bean name="p-namespace" class="com.example.ExampleBean"
p:email="foo@bar.com"/>
</beans>

从上面的bean定义中,我们采用p名称空间的方式包含了一个叫email的属性,而Spring会知道我们的bean包含了一个属性(property)定义。我们前面说了,p名称空间是不需要schema定义的,因此属性(attribute)的名字就是你bean的property的名字。

This next example includes two more bean definitions that both have a reference to another bean:

下面的例子包含了两个bean定义,它们都引用了另一个bean

<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-2.5.xsd"> <bean name="john-classic" class="com.example.Person">
<property name="name" value="John Doe"/>
<property name="spouse" ref="jane"/>
</bean> <bean name="john-modern"
class="com.example.Person"
p:name="John Doe"
p:spouse-ref="jane"/> <bean name="jane" class="com.example.Person">
<property name="name" value="Jane Doe"/>
</bean>
</beans>

As you can see, this example doesn't only include a property value using the p-namespace, but also uses a special format to declare property references. Whereas the first bean definition uses <property name="spouse" ref="jane"/> to create a reference from bean john to bean jane, the second bean definition uses p:spouse-ref="jane" as an attribute to do the exact same thing. In this case 'spouse' is the property name whereas the '-ref' part indicates that this is not a straight value but rather a reference to another bean.

上面的例子不仅使用p名称空间包含了一个属性(property)值,而且使用了一个特殊的格式声明了一个属性引用。在第一个bean定义中使用了<property name="spouse" ref="jane"/>来建立beanjohn到beanjane的引用,而第二个bean定义则采用p:spouse-ref="jane"属性(attribute)的方式达到了同样的目的。在这个例子中,"spouse"是属性(property)名,而"-ref“则用来说明该属性不是一个具体的值而是对另外一个bean的引用。

注意

需要注意的是,p名称空间没有标准的XML格式定义灵活,比如说,bean的属性名是以Ref结尾的,那么采用p名称空间定义就会导致冲突,而采用标准的XML格式定义则不会出现这种问题。这里我们提醒大家在项目中还是仔细权衡来决定到底采用那种方式,同时也可以在团队成员都理解不同的定义方式的基础上,在项目中根据需要同时选择三种定义方式。

转:http://blog.csdn.net/liaomin416100569/article/details/4924899

最新文章

  1. 在Application_Error事件中获取当前的Action和Control
  2. __cdecl和__stdcall
  3. 怎么判定一个mac地址是multicast还是unicast.
  4. LeetCode Subsets (DFS)
  5. SQL加、查、改、删、函数
  6. synchronized的重入
  7. SSIS 控制流和数据流(转)
  8. 安装Logstash
  9. 多线程——i++的坑
  10. 有哪些关于 Python 的技术博客?
  11. JqueryMobile基础之创建页面
  12. Linux的编码及编码转换
  13. vue动态切换组件
  14. 微信小程序手机预览请求不到数据(最后一条不明所以)
  15. BZOJ4720-换教室
  16. ftok()函数深度解析
  17. 迪杰斯特拉算法dijkstra(可打印最短路径)
  18. WPF 选择电脑文件显示路径,弹出资源管理器,打开文件
  19. 移动端页面滑动时候警告:Unable to preventDefault inside passive event listener due to target being treated as passive.
  20. LintCode: 3 Sum

热门文章

  1. shell脚本编程-使用结构化命令(if/else)(转)
  2. 通过sqlserver日志恢复误删除的数据
  3. 设计视图不能用于 x64 和 ARM 目标平台
  4. mysql centeros 安装
  5. javascript设计模式学习之七——迭代器模式
  6. Windows Security 学习笔记
  7. 转:DLL如何导出C++的类
  8. WPF 面试题及答案(二)
  9. windows Azure 域名绑定
  10. Mybatis-Plugin插件学习使用方法