7.11.1 使用p:命名空间简化配置
p:
命名空间甚至不需要特定的Schema
定义,它直接存在于Spring
内核中。与前面用<property>
元素定义Bean
的属性不同的是,当导入p:
命名空间之后,就可直接在<bean>
元素中使用属性来驱动执行setter
方法。
程序示例
假设有如下的持久化类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| E:\workspace_QingLiangJiJavaEEQiYeYingYongShiZhang5\p_namespace └─src\ ├─beans.xml ├─lee\ │ └─BeanTest.java └─org\ └─crazyit\ └─app\ └─service\ ├─Axe.java ├─impl\ │ ├─Chinese.java │ ├─SteelAxe.java │ └─StoneAxe.java └─Person.java
|
Chinese.java
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
| package org.crazyit.app.service.impl;
import org.crazyit.app.service.*;
public class Chinese implements Person { private Axe axe; private int age; public Chinese() { } public void setAxe(Axe axe) { this.axe = axe; } public void setAge(int age) { this.age = age; } public void useAxe() { System.out.println(axe.chop()); System.out.println("age成员变量的值:" + age); } }
|
上面的持久化类中有setAxe()
、 setAge()
两个setter
方法可通过设值注入
来驱动,如果采用原来的配置方式,则需要使用<property>
元素来驱动它们。但如果采用p:
命名空间,则可直接采用属性来配置它们。本应用的配置文件如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?xml version="1.0" encoding="GBK"?>
<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="chinese" class="org.crazyit.app.service.impl.Chinese" p:age="29" p:axe-ref="stoneAxe" /> <bean id="steelAxe" class="org.crazyit.app.service.impl.SteelAxe" /> <bean id="stoneAxe" class="org.crazyit.app.service.impl.StoneAxe" /> </beans>
|
导入p:命名空间
配置文件中<beans>
元素中的xmlns:p
属性:
1
| xmlns:p="http://www.springframework.org/schema/p"
|
用于导入XML Schema
里的p:
命名空间
使用p:属性名进行设值注入
在bean元素中加入p:属性名="属性值"
这个格式的属性即可直接对属性执行设值注入
。如果在属性名
后增加了"-ref"
后缀,则指定该值不是一个具体的值,而是对另外一个Bean
的引用。
使用p:命名空间时Bean内的属性名不要以-ref结尾
使用p:
命名空间没有标准的XML
格式灵活,如果某个Bean
的属性名是以-ref
结尾的,那么采用p:
命名空间定义时就会发生冲突,而采用标准的XML
格式定义则不会出现这种问题。