Spring(04)——p命名空间和c命名空间ITeye - 威尼斯人

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

2019-01-09 16:38:39 | 作者: 又亦 | 标签: 命名,空间,对应 | 浏览: 887

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" / 
 !-- 经过set办法注入的传统的bean界说 -- 
 bean id="hello1" 
 property name="p1" value="v1"/ 
 property name="p2" value="v2"/ 
 property name="world" ref="world"/ 
 /bean 
 !-- 经过set办法注入的运用p命名空间的bean界说 -- 
 bean id="hello2" 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" / 
 !-- 传统的运用constructor-arg经过结构办法注入的bean界说 -- 
 bean id="hello1" 
 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" 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" / 
 !-- 传统的运用constructor-arg经过结构办法注入的bean界说 -- 
 bean id="hello1" 
 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" c:_0="c_arg1" c:_1="2" c:_2-ref="world"/ 
 /beans 

(注:本文是根据Spring4.1.0所写)

 

本文转自:https://elim.iteye.com/blog/2383341

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表威尼斯人立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章