7 -- Spring的基本用法 -- 11... 基于XML Schema的简化配置方式
7.11 基于XML Schema的简化配置方式
Spring允许使用基于XML Schema的配置方式来简化Spring配置文件。
7.11.1 使用p:命名空间简化配置
p:命名空间不需要特定的Schema定义,它直接存在于Spring内核中。
当导入p:命名空间之后,就可直接在<bean.../>元素中使用属性来驱动执行setter方法。即用于简化设置注入
Class : SteelAxe
package edu.pri.lime._7_11_1.bean; public class SteelAxe implements Axe { public String chop() { return "用钢斧砍材真快"; } }
Class : Chinese
package edu.pri.lime._7_11_1.bean.impl; import edu.pri.lime._7_11_1.bean.Axe; import edu.pri.lime._7_11_1.bean.Person; public class Chinese implements Person{ private Axe axe; private int age; public Chinese() { super(); // TODO Auto-generated constructor stub } public Axe getAxe() { return axe; } public void setAxe(Axe axe) { this.axe = axe; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void useAxe(){ System.out.println(axe.chop()); System.out.println("age成员变量的值:" + age); } }
导入XML Schema里的p:命名空间
<?xml version="1.0" encoding="UTF-8"?> <!-- Spring 配置文件的根元素,使用Spring-beans-4.0.xsd语义约束 --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
XML :
<?xml version="1.0" encoding="UTF-8"?> <!-- Spring 配置文件的根元素,使用Spring-beans-4.0.xsd语义约束 --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- 配置steelAxe实例,其实现类是SteelAxe --> <bean id="steelAxe" class="edu.pri.lime._7_11_1.bean.SteelAxe"/> <!-- 配置chinese实例,其实现类是Chinese --> <!-- 使用属性配置对age、axe执行设置注入 --> <!-- 使用p:命名空间时,Bean的属性名不能以-ref结尾 --> <bean id="chinese" class="edu.pri.lime._7_11_1.bean.impl.Chinese" p:age="30" p:axe-ref="steelAxe" /> </beans>
Class :SpringTest
package edu.pri.lime._7_11_1.main; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import edu.pri.lime._7_11_1.bean.Person; import edu.pri.lime._7_11_1.bean.impl.Chinese; public class SpringTest { public static void main(String[] args){ ApplicationContext ctx = new ClassPathXmlApplicationContext("app_7_11_1.xml"); Person chinese = ctx.getBean("chinese",Chinese.class); chinese.useAxe(); } }
Console :
用钢斧砍材真快
age成员变量的值:30
7.11.2 使用c:命名空间简化配置
c:命名空间用于简化构造注入
Class : Chinese
package edu.pri.lime._7_11_2.bean.impl; import edu.pri.lime._7_11_2.bean.Axe; import edu.pri.lime._7_11_2.bean.Person; public class Chinese implements Person{ private Axe axe; private int age; public Chinese() { super(); } // 构造注入所需的带参数的构造器 public Chinese(Axe axe, int age) { super(); this.axe = axe; this.age = age; } public void useAxe() { System.out.println(axe.chop()); System.out.println("age成员变量的值:" + age); } public Axe getAxe() { return axe; } public void setAxe(Axe axe) { this.axe = axe; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
Class : SteelAxe
package edu.pri.lime._7_11_2.bean.impl; import edu.pri.lime._7_11_2.bean.Axe; public class SteelAxe implements Axe{ public String chop() { return "用钢斧砍材真快"; } }
导入c:命名空间
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
XML :
<?xml version="1.0" encoding="UTF-8"?> <!-- Spring 配置文件的根元素,使用Spring-beans-4.0.xsd语义约束 --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- 配置steelAxe实例,其实现类是SteelAxe --> <bean id="steelAxe" class="edu.pri.lime._7_11_2.bean.impl.SteelAxe"/> <!-- 配置chinese实例,其实现类是Chinese --> <!-- 使用属性配置对age、axe执行设置注入 --> <!-- 使用p:命名空间时,Bean的属性名不能以-ref结尾 --> <bean id="chinese" class="edu.pri.lime._7_11_2.bean.impl.Chinese" c:age="30" c:axe-ref="steelAxe" /> </beans>
Class : SpringTest
package edu.pri.lime._7_11_2.main; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import edu.pri.lime._7_11_2.bean.Person; import edu.pri.lime._7_11_2.bean.impl.Chinese; public class SpringTest { public static void main(String[] args){ ApplicationContext ctx = new ClassPathXmlApplicationContext("app_7_11_2.xml"); Person chinese = ctx.getBean("chinese",Chinese.class); chinese.useAxe(); } }
使用c:指定构造器参数的格式为:c:构造器参数名=“值” 或 c:构造器参数名-ref=“其他Bean的id”。
通过索引来配置构造器参数的方式:
<bean id="chinese" class="edu.pri.lime._7_11_2.bean.impl.Chinese" c:_0-ref = "steelAxe" c:_1="21" />
通过索引来配置构造器参数的格式:c:_N=“值” 或 c:_N-ref=“其他Bean的id” 其中N代表第N个构造器参数。
7.11.3 使用util:命名空间简化配置
在Spring框架解压缩包的schema\util\路径下包含有util:命名空间的XML Schema文件,为了使用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:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
在util Schema下提供了如下几个元素:
⊙ constant :该元素用于获取指定类的静态Field的值。它是FieldRetrievingFactoryBean的简化配置。
⊙ property-path : 该元素用于获取指定对象的getter方法的返回值。它是PropertyPathFactoryBean的简化配置。
⊙ list : 该元素用于定义一个List Bean,支持使用<value.../>、<ref.../>、<bean.../>等子元素来定义List集合元素。
使用该标签支持如下三个属性:
◎ id : 该属性指定定义一个名为id 的List Bean实例。
◎ list-class : 该属性指定Spring使用哪个List实现类来创建Bean实例。默认使用ArrayList作为实现类。
◎ scope : 指定该List Bean实例的作用域。
⊙ set : 该元素用于定义一个Set Bean,支持使用<value.../>、<ref.../>、<bean.../>等子元素来定义Set元素集合。
◎ id : 该属性指定定义一个名为id的Set Bean实例。
◎ set-class : 该属性指定Spring 使用哪个Set实现类来创建Bean实例。默认使用HashSet作为实现类。
◎ scope : 指定该Set Bean实例的作用域。
⊙ map : 该元素用于指定一个Map Bean,支持使用<entry.../>来定义Map的key-value对。
使用该标签支持如下三个属性:
◎ id 该属性指定定义一个名为id的Map Bean实例。
◎ map-class : 该属性指定Spring使用哪个Map实现类来创建Bean实例。默认使用HashMap作为实现类。
◎ scope : 指定该Map Bean 实例的作用域。
⊙ properties : 该元素用于加载一份资源文件,并根据加载的资源文件创建一个Properties Ben 实例。
使用该标签可指定如下几个属性:
◎ id : 该属性指定定义一个名为id 的Properties Bean实例。
◎ location : 指定资源文件的位置。
◎ scope : 指定该Properties Bean实例的作用域。
Class : Chinese
package edu.pri.lime._7_11_3.bean.impl; import java.util.List; import java.util.Map; import java.util.Set; import edu.pri.lime._7_11_3.bean.Axe; import edu.pri.lime._7_11_3.bean.Person; public class Chinese implements Person{ private Axe axe; private int age; private List schools; private Map scores; private Set axes; public Chinese() { super(); } 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); } public Axe getAxe() { return axe; } public void setAxe(Axe axe) { this.axe = axe; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List getSchools() { return schools; } public void setSchools(List schools) { this.schools = schools; } public Map getScores() { return scores; } public void setScores(Map scores) { this.scores = scores; } public Set getAxes() { return axes; } public void setAxes(Set axes) { this.axes = axes; } }
导入util:命名空间Schema
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
XML :
<?xml version="1.0" encoding="UTF-8"?> <!-- Spring 配置文件的根元素,使用Spring-beans-4.0.xsd语义约束 --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <bean id="steelAxe" class="edu.pri.lime._7_11_3.bean.impl.SteelAxe"/> <util:list id="chin.schools" list-class="java.util.LinkedList"> <value>小学</value> <value>中学</value> <value>大学</value> </util:list> <util:map id="chin.scores" map-class="java.util.HashMap"> <entry key="数学" value="100"/> <entry key="语文" value="100"/> <entry key="英语" value="100"/> </util:map> <util:set id="chin.axes" set-class="java.util.HashSet"> <value>字符串</value> <bean class="edu.pri.lime._7_11_3.bean.impl.SteelAxe"/> <ref bean="chin.schools"/> </util:set> <bean id="chinese" class="edu.pri.lime._7_11_3.bean.impl.Chinese" p:axe-ref="steelAxe"
p:age="20" p:schools-ref="chin.schools" p:scores-ref="chin.scores" p:axes-ref="chin.axes"/> </beans>
Class : SpringTest
package edu.pri.lime._7_11_3.main; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import edu.pri.lime._7_11_3.bean.Person; import edu.pri.lime._7_11_3.bean.impl.Chinese; public class SpringTest { public static void main(String[] args){ ApplicationContext ctx = new ClassPathXmlApplicationContext("app_7_11_3.xml"); Person chinese = ctx.getBean("chinese",Chinese.class); chinese.useAxe(); } }
除此之外,关于Spring其他常用的简化Schema简要说明如下:
⊙ spring-aop-4.0.xsd :用于简化Spring AOP配置的Schema。
⊙ spring-jee-4.0.xsd : 用于简化Spring 的Java EE 配置的Schema。
⊙ spring-jms-4.0.xsd : 用于简化Spring关于JMS 配置的Schema。
⊙ spring-lang-4.0.xsd : 用于简化Spring 动态语言配置的Schema。
⊙ spring-tx-4.0.xsd : 用于简化Spring事务配置的Schema。
啦啦啦
相关文章
- spring事物配置,声明式事务管理和基于@Transactional注解的使用
- Spring Boot使用嵌入式容器,那怎么配置自定义Filter呢
- 【Spring Boot】Spring Boot之自定义配置参数绑定到Java Bean
- 一般spring配置上下文
- spring cloud: Hystrix(二):简单使用@HystrixCommand的commandProperties配置@HistrixProperty隔离策略
- spring mvc: 可参数化的视图控制器(在配置中指定jsp文件)MultiActionController/SimpleUrlHandlerMapping/ParameterizableViewController
- Quartz在Spring中动态设置cronExpression (spring设置动态定时任务)------转帖
- 使用 rocketmq-spring-boot-starter 来配置、发送和消费 RocketMQ 消息
- Spring Boot 2.x :通过 spring-boot-starter-hbase 集成 HBase
- spring boot:shardingsphere+druid+mysql主从复制的读写分离(分库分表)(spring boot 2.3.4)
- spring boot配置dubbo(properties)
- Spring Boot 2.x整合Apollo代码示例
- Atitit xml转json总结 目录 1.1. XML和JSON之间没有直接映射;元素类型问题1 1.2. Xml与json的对应关系2 1.3. 范例2 2. Jsonlib的问题,,不
- spring autowired还需要在xml中申明bean ?
- spring常用的一些注解以及注解注入总结
- Spring 自定义注解,配置简单日志注解
- spring boot配置dubbo注意事项
- SSH框架入门学习之二(spring)
- 001-Spring Cloud Edgware.SR3 升级最新 Finchley.SR1,spring boot 1.5.9.RELEASE 升级2.0.4.RELEASE注意问题点
- Spring【AOP】
- Spring通过@Configuratin配置Bean
- Spring MVC复选框