1.使用P:命名空间

p:命名空间甚至不需要特定的Schema定义,它直接存在于Spring内核中。与前面采用<property…/>元素定义Bean的属性不同是,当导入p:命名空间之后,就可以直接在<bean…/>元素中使用属性来驱动执行setter方法。

下面是一个持久化的类

public class Chinese implements Person
{private Axe axe;private int age;public Chinese(){ }// axe的setter方法public void setAxe(Axe axe){this.axe = axe;}// age的setter方法public void setAge(int age){this.age = age;}// 实现Person接口的useAxe()方法public void useAxe(){System.out.println(axe.chop());System.out.println("age成员变量的值:" + age);}
}

上面的持久化类在配置文件的配置。

<?xml version="1.0" encoding="GBK"?>
<!-- 指定Spring配置文件的根元素和Schema并导入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/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd"><!-- 配置chinese实例,其实现类是Chinese --><bean id="chinese" class="com.owen.app.service.impl.Chinese"p:age="29" p:axe-ref="stoneAxe"/><!-- 配置steelAxe实例,其实现类是SteelAxe --><bean id="steelAxe" class="com.owen.app.service.impl.SteelAxe"/><!-- 配置stoneAxe实例,其实现类是StoneAxe --><bean id="stoneAxe" class="com.owen.app.service.impl.StoneAxe"/>
</beans>

配置文件中需要导入XML Schema里的p:命名空间(xmlns:p="http://www.springframework.org/schema/p)。在代码中直接使用属性配置age、axe执行设值注入,因为axe设值注入的参数需要引用容器中另一个已经存在的Bean实例,故在axe后增加了“-ref”后缀,这个后缀指定该值不是一个具体的值,而是对另外一个Bean的引用。

2.使用c:命名空间

p:命名空间主要用于简化设值注入,而c:命名空间则用于简化构造注入。

下面是一个持久化的类。

public class Chinese implements Person
{private Axe axe;private int age;// 构造注入所需的带参数的构造器public Chinese(Axe axe, int age){this.axe = axe;this.age = age;}// 实现Person接口的useAxe()方法public void useAxe(){// 调用axe的chop()方法// 表明Person对象依赖于axe对象System.out.println(axe.chop());System.out.println("age成员变量的值:" + age);}
}

上面的配置方式是在c:后使用构造器参数名来指定构造参数,Spring还支持一种通过索引来配置构造器参数的方式。上面的Bean也可改写为如下:

<bean id=”chinese2”class=”com.owen.app.service.impl.Chinese” c:_0-ref=”steelAxe” c_1=”29”/>

这种方式下,c:_N中的N代表第几个构造参数。

3.使用util:命名空间

在Spring构架解压缩包的schema\util路径下包含有util:命名空间的XMLSchema文件,为了使用util:命名空间元素,必须先在Spring配置文件中导入最新的spring-util-4.0.xsd,也是需要在Spring配置文件中增加如下的片段。

<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"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-4.0.xsd">

util Schema下提供了如下几个元素:

1)        constant:该元素用于获取指定类的静态Field的值。它是FiledRetrievingFactoryBean的简化配置。

2)        property-path:该元素用于获取指定对象的getter方法的返回值。它是PropertyPathFactoryBean的简化配置。

3)        List:该元素用于定义一个ListBean,支持使用<value../>、<ref…/>、<bean…/>等子元素来定义List集合元素。

4)        set:该元素用于定义一个SetBean,支持使用<value../>、<ref…/>、<bean…/>等子元素来定义Set集合元素。

5)        map:该元素用于定义一个MapBean,支持使用<entry…/>来定义Map的key-value对。

6)        properties:该元素用于加载一份资源文件,并根据加载的资源文件创建一个Properties Bean实例。

下面定义一个Bean类,这个类中包含List、Set、Map等集合。

public class Chinese implements Person
{private Axe axe;private int age;private List schools;private Map scores;private Set axes;// axe的setter方法public void setAxe(Axe axe){this.axe = axe;}// age的setter方法public void setAge(int age){this.age = age;}// schools的setter方法public void setSchools(List schools){this.schools = schools;}// scores的setter方法public void setScores(Map scores){this.scores = scores;}// axes的setter方法public void setAxes(Set axes){this.axes = axes;}// 实现Person接口的useAxe()方法public void useAxe(){System.out.println(axe.chop());System.out.println("age属性值:" + age);System.out.println(schools);System.out.println(scores);System.out.println(axes);}
}

下面定义使用基于XML Schema的配置文件。

 <?xml version="1.0" encoding="GBK"?>
<!-- 指定Spring配置文件的根元素和Schema导入p:命名空间和util:命名空间的元素 -->
<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"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-4.0.xsd"><!-- 配置chinese实例,其实现类是Chinese --><bean id="chinese" class="com.owen.app.service.impl.Chinese"p:age-ref="chin.age" p:axe-ref="stoneAxe"p:schools-ref="chin.schools"p:axes-ref="chin.axes"p:scores-ref="chin.scores"/><!-- 使用util:constant将指定类的静态Field定义成容器中的Bean --><util:constant id="chin.age" static-field="java.sql.Connection.TRANSACTION_SERIALIZABLE"/><!-- 使用util.properties加载指定资源文件 --><util:properties id="confTest"location="classpath:test_zh_CN.properties"/><!-- 使用util:list定义一个List集合,指定使用LinkedList作为实现类,如果不指定默认使用ArrayList作为实现类 --><util:list id="chin.schools" list-class="java.util.LinkedList"><!-- 每个value、ref、bean...配置一个List元素 --><value>小学</value><value>中学</value><value>大学</value></util:list><!-- 使用util:set定义一个Set集合,指定使用HashSet作为实现类,如果不指定默认使用HashSet作为实现类--><util:set id="chin.axes" set-class="java.util.HashSet"><!-- 每个value、ref、bean...配置一个Set元素 --><value>字符串</value><bean class="com.owen.app.service.impl.SteelAxe"/><ref bean="stoneAxe"/></util:set><!-- 使用util:map定义一个Map集合,指定使用TreeMap作为实现类,如果不指定默认使用HashMap作为实现类 --><util:map id="chin.scores" map-class="java.util.TreeMap"><entry key="数学" value="87"/><entry key="英语" value="89"/><entry key="语文" value="82"/></util:map><!-- 配置steelAxe实例,其实现类是SteelAxe --><bean id="steelAxe" class="com.owen.app.service.impl.SteelAxe"/><!-- 配置stoneAxe实例,其实现类是StoneAxe --><bean id="stoneAxe" class="com.owen.app.service.impl.StoneAxe"/>
</beans>

4.总结

Spring提出的这种XML Schema的配置方式,可以对Spring配置文件进行缩小,这样配置出来的文件会简单、直观,而且能以相同风格处理所有Bean的配置——唯一的缺点是配置烦琐。当Bean实例的属性足够多,且属性类型复杂时,基于DTD的配置文件将变得更加烦琐。

使用XML Schema的简化配置方式相关推荐

  1. Spring笔记——8.基于XML Schema的简化配置

    我们可以使用XML Schema的配置方式来简化xml文件的配置. p:简化设值注入 p:与property子元素作用相同,用于设值注入.若想使用p,则xml文件中需要引入对p的说明,一般自动生成的x ...

  2. Spring-注入参数详解-[简化配置方式]

    概述 字面属性值 字面值属性 构造函数参数 集合元素 引用对象属性 字面值属性 构造函数参数 集合元素 使用P命名空间 通过p命名空间引用字面属性值 通过p命名空间引用其他bean 概述 Spring ...

  3. spring框架xml的几种配置方式

    spring框架xml的几种配置方式 ioc配置一般由一下两大类 1 手动装配 利用xml手动配置,分为:setter方法装配 ,构造器装配 2 自动装配 利用注解自动装配 准备工作:userdao ...

  4. dump文件_一种比Xml更敏捷的配置方式,Python Yaml 配置文件解析模块详解

    为什么选择Yaml Yaml的可读性好.扩展性好. Yaml和脚本语言的交互性好. Yaml使用实现语言的数据类型. Yaml有一个一致的信息模型. Yaml易于实现. Yaml试图用一种比Xml更敏 ...

  5. Struts2-关于struts.xml文件的action配置的说明

    一.Action的说明: Struts2的核心功能就是action,对于开发者,使用Struct2框架的主要工作就是编写Action类来实现业务.action类可以不用继承任何父类和实现任何接口,但是 ...

  6. Spring-不同配置方式的比较

    概述 Bean不同配置方式比较 Bean不同配置方式的使用场景 基于XML配置 基于注解配置 基于Java类配置 基于Groovy的配置 总结 概述 对于Spring来讲,为实现Bean的信息定义,提 ...

  7. 面向切面(AOP)之Spring接口方式 schema配置方式 aspectj注解方式

    一.初识AOP   关于AOP的学习可以参看帮助文档:spring-3.2.0.M2\docs\reference\html目录下index.html的相关章节      1.AOP:Aspect-O ...

  8. Dubbo(四)之xml配置方式

    转载自  Dubbo xml配置方式 以 XML 配置的方式来配置你的 Dubbo 应用 有关 XML 的详细配置项,请参见:配置参考手册.如果不想使用 Spring 配置,而希望通过 API 的方式 ...

  9. reportConfig.xml两种数据源连接的配置方式

     在reportConfig.xml配置文件中,我们提供了两种数据源连接的配置方式,分别如下: 1.jndi数据源配置(即:在dataSource中配置) 此配置适用于在j2ee的服务器中配置了j ...

  10. Spring Boot 2.x基础教程:使用MyBatis的XML配置方式

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | http://blog.di ...

最新文章

  1. 解决System.Data.SqlClient.SqlException (0x80131904): Timeout 时间已到的问题
  2. mysql中文查询问题
  3. 信息系统项目管理师培训感言
  4. Sam Palmisano Reveals Secret Behind IBM's Century Of Success
  5. matlab 生成几个聚类点函数nngenc函数
  6. 随机过程:高斯函数导数、梯度
  7. iOS Winding Rules 缠绕规则
  8. 【项目实战】mybatis +vue.js 前后端交互批量删除
  9. linux怎么制作运行包,简单 RPM 包制作
  10. hbase完整分布式集群搭建
  11. 产品认知:你的产品适不适合快速去迭代?
  12. linux查看cpu缓存大小,如何在Linux中获取CPU Cache的大小
  13. 汇总10.4版本ArcGIS Server与ArcMap 安装+SDE+注册数据源(非破解)
  14. 一些oracle基础
  15. java 基本语法 二_java基础语法2
  16. DC、HDC和CDC的区别及MFC常见类的作用
  17. tunnelbroker_通过OPNSense上的TunnelBroker进行IPv6
  18. 钱晓捷第五版习题4 题4.8 bufx bufy bufz 为三个有符号十六进制数编写一个比较相等关系的程序如果这三个数都不相等则显示0,其中两个相等显示1 ,三个都相等则显示2
  19. 科学计算机求n次方,科学计算器怎么算n次方_科学计算器的度分秒怎么按
  20. Ubuntu 18.04实现实时显示网速

热门文章

  1. 解决 jersey 单jar包 IME media type text/plain was not found.
  2. Java基础--说集合框架
  3. [转]Arrays.sort()你应该知道的事
  4. 心路历程5:雨天 --by Tsui
  5. 防火墙虚拟系统互访配置实例
  6. C++ 从入门到入土(English Version) Section 1:Gates, Circuits and Boolean Algebra
  7. HDOJ--1869--六度分离(用三种算法写的,希望能比较出来他们之间的区别)
  8. 蚂蚁金服分布式链路跟踪组件 SOFATracer 总览 | 剖析
  9. KL与JS散度学习[转载]
  10. HTML5文件API之FileReader