zoukankan      html  css  js  c++  java
  • Spring中的p标签

    Spring的p标签是基于XML Schema的配置方式,目的是为了简化配置方式。

    在XML文件头部添加xmlns:p="http://www.springframework.org/schema/p"即可使用。

    例如:

    类Student

    1. public class Student
    2. {  
    3.   private int id;  
    4.   private Course course;  
    5.   public void setId(int id)  
    6.   {  
    7.      this.id=id;  
    8.   }  
    9.   public void setTool(Course course)  
    10.   {  
    11.      this.course=course;  
    12.   }  
    13. ...
    14. }  

    原始的bean配置为

    1. <?xml version="1.0" encoding="GBK"?>  
    2. <beans xmlns="http://www.springframework.org/schema/beans"  
    3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    4.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
    5.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
    6.     <bean id="studentclass="com.myclass.Student">  
    7.         <property name="id" value="1"/>  
    8.         <property name="course" ref="course"/>  
    9.     </bean>  
    10. </beans>  


    使用P标签的配置为

    1. <?xml version="1.0" encoding="GBK"?>  
    2. <beans xmlns="http://www.springframework.org/schema/beans"  
    3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    4.     xmlns:p="http://www.springframework.org/schema/p"  
    5.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
    6.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
    7.     <bean id="student" class="com.myclass.Studentp:id="21" p:course-ref="tool"/>  
    8. </beans>  

    tool之后添加"-ref"后缀表示是对另外一个bean的引用。

    另外:

    给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格式定义则不会出现这种问题。这里我们提醒大家在项目中还是仔细权衡来决 定到底采用那种方式,同时也可以在团队成员都理解不同的定义方式的基础上,在项目中根据需要同时选择三种定义方式。

  • 相关阅读:
    C# is 与 as 运算符
    C# dynamic类型
    C# 数组
    C# 泛型
    C# 事件
    C# 委托
    C# DateTime类,TimeSpan类
    C# 获取当前应用程序的绝对路径支持asp.net
    C# 父子类_实例_静态成员变量_构造函数的执行顺序
    C# System.Uri类_获取Url的各种属性_文件名_参数_域名_端口等等
  • 原文地址:https://www.cnblogs.com/ihanliu/p/4721841.html
Copyright © 2011-2022 走看看