7 -- Spring的基本用法 -- 11...
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。
啦啦啦
7 -- Spring的基本用法 -- 11...的更多相关文章
- 7 -- Spring的基本用法 -- 11... 基于XML Schema的简化配置方式
7.11 基于XML Schema的简化配置方式 Spring允许使用基于XML Schema的配置方式来简化Spring配置文件. 7.11.1 使用p:命名空间简化配置 p:命名空间不需要特定的S ...
- SpringMVC +mybatis+spring 结合easyui用法及常见问题总结
SpringMVC +mybatis+spring 结合easyui用法及常见问题总结 1.FormatString的用法. 2.用postAjaxFillGrid实现dataGrid 把form表单 ...
- spring 第一篇(1-1):让java开发变得更简单(下)转
spring 第一篇(1-1):让java开发变得更简单(下) 这个波主虽然只发了几篇,但是写的很好 上面一篇文章写的很好,其中提及到了Spring的jdbcTemplate,templet方式我之前 ...
- Spring MVC 学习笔记11 —— 后端返回json格式数据
Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...
- Spring中@Async用法详解及简单实例
Spring中@Async用法 引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类 ...
- Spring让人眼前一亮的11个小技巧
前言 我们一说到spring,可能第一个想到的是 IOC(控制反转) 和 AOP(面向切面编程). 没错,它们是spring的基石,得益于它们的优秀设计,使得spring能够从众多优秀框架中脱颖而出. ...
- 7 -- Spring的基本用法 -- 4...
7.4 使用 Spring 容器 Spring 有两个核心接口:BeanFactory 和 ApplicationContext,其中ApplicationContext 是 BeanFactory ...
- (转)Spring中@Async用法总结
原文:http://blog.csdn.net/blueheart20/article/details/44648667 引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的: ...
- Spring中@Async用法总结
引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3. ...
随机推荐
- SQL Server 2008删除或压缩数据库日志的方法
SQL Server 2008删除或压缩数据库日志的方法 2010-09-20 20:15 由 于数据库日志增长被设置为“无限制”,所以时间一长日志文件必然会很大,一个400G的数据库居然有600G的 ...
- 转 Linux下的GoldenGate的启动关闭Shell脚本(独立)
用户想要用OGG进行同步数据,原来用的是Shareplex,至于为啥要换OGG,BulaBula一堆原因.....这不是我们要在意的事情,和客 户装完配置好OGG之后,测试中,客户提出要有个简单的启动 ...
- 【纯欧拉函数】 poj 2407
#include <cstdio> #include <iostream> using namespace std; int phi(int x) { int t=x; ;i& ...
- Lua 垃圾收集机制
1. 问题:一款用Lua做的游戏,玩了一段时间后会变卡 因为知道lua是有自动管理内存的机制,所以之前一直没有关注过lua内存的问题.所以今天好好的查看了lua垃圾收集机制.看了一下Lua的Garba ...
- JNI调用问题(部分机型崩溃)
1.今日测试发现在部分手机上游戏会崩溃,通过logcat日志发现是jni调用问题(我猜测) 错误日志中有如下语句: trying to work around app JNI bugs, but di ...
- Toy Storage POJ 2398
题目大意:和 TOY题意一样,但是需要对隔板从左到右进行排序,要求输出的是升序排列的含有i个玩具的方格数,以及i值. 题目思路:判断叉积,二分遍历 #include<iostream> # ...
- ACE_Time_Value
头文件“Time_Value.h” 为了兼容各个平台的时间特性,ACE Reactor框架提供了ACE_Time_Value类.ACE_Time_Value的关键方法见下图3.2和表3.2.3.3: ...
- 在CDockablePane中嵌入对话框
CDockablePane类可以用来创建停靠栏.可以将其他控件集成到CDockablePane的派生类中.下文描述如何将对话框集成到CDockablePane中. a) 创建单文档应用程序: ...
- VideoView的视频的全屏播放
import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.content.I ...
- 文字在边界自动换行word-wrap:break-word
div容器内中内容将在边界内换行,(word-wrap)英语句子中单词内不强制换行.(word-break)如果需要词内换行