- 浏览: 185250 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
louis0911:
发布项目的时候就报错。不知道什么原因。。。自己搭的也报错,把您 ...
Tomcat下发布webservice1 -
Mr_caochong:
非常好的博文,例子实用但是如何输出package信息呢
asm操作Java(二) -
wenjinglian:
up up
Js中escape(),encodeURI()和encodeURIComponent()使用和比较 -
makemyownlife:
看来还得补补知识
tomcat与apache区别 -
tinguo002:
非常的棒!谢谢楼主
对于[0] 和[1] 终于理解了咯,按照上 ...
iterator的用法
在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,但配置较为复杂或者需要更多丰富控制的时候,会显得非常笨拙。一般的做法会用原生态的方式去解析定义好的xml文件,然后转化为配置对象,这种方式当然可以解决所有问题,但实现起来比较繁琐,特别是是在配置非常复杂的时候,解析工作是一个不得不考虑的负担。Spring提供了可扩展Schema的支持,这是一个不错的折中方案,完成一个自定义配置一般需要以下步骤:
设计配置属性和JavaBean
编写XSD文件
编写NamespaceHandler和BeanDefinitionParser完成解析工作
编写spring.handlers和spring.schemas串联起所有部件
在Bean文件中应用
下面结合一个小例子来实战以上过程
1)设计配置属性和JavaBean
首先当然得设计好配置项,并通过JavaBean来建模,本例中需要配置People实体,配置属性name和age(id是默认需要的)
2)编写XSD文件
为上一步设计好的配置项编写XSD文件,XSD是schema的定义文件,配置的输入和解析输出都是以XSD为契约,本例中XSD如下:
关于xsd:schema的各个属性具体含义就不作过多解释,可以参见http://www.w3school.com.cn/schema/schema_schema.asp
<xsd:element name="people">对应着配置项节点的名称,因此在应用中会用people作为节点名来引用这个配置
<xsd:attribute name="name" type="xsd:string" />和<xsd:attribute name="age" type="xsd:int" />对应着配置项people的两个属性名,因此在应用中可以配置name和age两个属性,分别是string和int类型
完成后需把xsd存放在classpath下,一般都放在META-INF目录下(本例就放在这个目录下)
3)编写NamespaceHandler和BeanDefinitionParser完成解析工作
下面需要完成解析工作,会用到NamespaceHandler和BeanDefinitionParser这两个概念。具体说来NamespaceHandler会根据schema和节点名找到某个BeanDefinitionParser,然后由BeanDefinitionParser完成具体的解析工作。因此需要分别完成NamespaceHandler和BeanDefinitionParser的实现类,Spring提供了默认实现类NamespaceHandlerSupport和AbstractSingleBeanDefinitionParser,简单的方式就是去继承这两个类。本例就是采取这种方式:
其中registerBeanDefinitionParser("people", new PeopleBeanDefinitionParser());就是用来把节点名和解析类联系起来,在配置中引用people配置项时,就会用PeopleBeanDefinitionParser来解析配置。PeopleBeanDefinitionParser就是本例中的解析类:
其中element.getAttribute就是用配置中取得属性值,bean.addPropertyValue就是把属性值放到bean中。
4)编写spring.handlers和spring.schemas串联起所有部件
上面几个步骤走下来会发现开发好的handler与xsd还没法让应用感知到,就这样放上去是没法把前面做的工作纳入体系中的,spring提供了spring.handlers和spring.schemas这两个配置文件来完成这项工作,这两个文件需要我们自己编写并放入META-INF文件夹中,这两个文件的地址必须是META-INF/spring.handlers和META-INF/spring.schemas,spring会默认去载入它们,本例中spring.handlers如下所示:
http\://blog.csdn.net/cutesource/schema/people=study.schemaExt.MyNamespaceHandler
以上就是载入xsd文件
5)在Bean文件中应用
到此为止一个简单的自定义配置以完成,可以在具体应用中使用了。使用方法很简单,和配置一个普通的spring bean类似,只不过需要基于我们自定义schema,本例中引用方式如下所示:
其中xmlns:cutesource="http://blog.csdn.net/cutesource/schema/people"是用来指定自定义schema,xsi:schemaLocation用来指定xsd文件。<cutesource:people id="cutesource" name="zhijun.yuanzj" age="27"/>是一个具体的自定义配置使用实例。
最后就可以在具体程序中使用基本的bean载入方式来载入我们的自定义配置对象了,如:
以上就是一个基于Spring可扩展Schema提供自定义配置支持实战过程,一些复杂应用和技巧还有待挖掘
转载:http://www.cnblogs.com/jifeng/archive/2011/09/14/2176599.html
设计配置属性和JavaBean
编写XSD文件
编写NamespaceHandler和BeanDefinitionParser完成解析工作
编写spring.handlers和spring.schemas串联起所有部件
在Bean文件中应用
下面结合一个小例子来实战以上过程
1)设计配置属性和JavaBean
首先当然得设计好配置项,并通过JavaBean来建模,本例中需要配置People实体,配置属性name和age(id是默认需要的)
public class People { private String id; private String name; private Integer age; }
2)编写XSD文件
为上一步设计好的配置项编写XSD文件,XSD是schema的定义文件,配置的输入和解析输出都是以XSD为契约,本例中XSD如下:
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns="http://blog.csdn.net/cutesource/schema/people" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:beans="http://www.springframework.org/schema/beans" targetNamespace="http://blog.csdn.net/cutesource/schema/people" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xsd:import namespace="http://www.springframework.org/schema/beans" /> <xsd:element name="people"> <xsd:complexType> <xsd:complexContent> <xsd:extension base="beans:identifiedType"> <xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="age" type="xsd:int" /> </xsd:extension> </xsd:complexContent> </xsd:complexType> </xsd:element> </xsd:schema>
关于xsd:schema的各个属性具体含义就不作过多解释,可以参见http://www.w3school.com.cn/schema/schema_schema.asp
<xsd:element name="people">对应着配置项节点的名称,因此在应用中会用people作为节点名来引用这个配置
<xsd:attribute name="name" type="xsd:string" />和<xsd:attribute name="age" type="xsd:int" />对应着配置项people的两个属性名,因此在应用中可以配置name和age两个属性,分别是string和int类型
完成后需把xsd存放在classpath下,一般都放在META-INF目录下(本例就放在这个目录下)
3)编写NamespaceHandler和BeanDefinitionParser完成解析工作
下面需要完成解析工作,会用到NamespaceHandler和BeanDefinitionParser这两个概念。具体说来NamespaceHandler会根据schema和节点名找到某个BeanDefinitionParser,然后由BeanDefinitionParser完成具体的解析工作。因此需要分别完成NamespaceHandler和BeanDefinitionParser的实现类,Spring提供了默认实现类NamespaceHandlerSupport和AbstractSingleBeanDefinitionParser,简单的方式就是去继承这两个类。本例就是采取这种方式:
import org.springframework.beans.factory.xml.NamespaceHandlerSupport; public class MyNamespaceHandler extends NamespaceHandlerSupport { public void init() { registerBeanDefinitionParser("people", new PeopleBeanDefinitionParser()); } }
其中registerBeanDefinitionParser("people", new PeopleBeanDefinitionParser());就是用来把节点名和解析类联系起来,在配置中引用people配置项时,就会用PeopleBeanDefinitionParser来解析配置。PeopleBeanDefinitionParser就是本例中的解析类:
import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.util.StringUtils; import org.w3c.dom.Element; public class PeopleBeanDefinitionParser extends AbstractSingleBeanDefinitionParser { protected Class getBeanClass(Element element) { return People.class; } protected void doParse(Element element, BeanDefinitionBuilder bean) { String name = element.getAttribute("name"); String age = element.getAttribute("age"); String id = element.getAttribute("id"); if (StringUtils.hasText(id)) { bean.addPropertyValue("id", id); } if (StringUtils.hasText(name)) { bean.addPropertyValue("name", name); } if (StringUtils.hasText(age)) { bean.addPropertyValue("age", Integer.valueOf(age)); } } }
其中element.getAttribute就是用配置中取得属性值,bean.addPropertyValue就是把属性值放到bean中。
4)编写spring.handlers和spring.schemas串联起所有部件
上面几个步骤走下来会发现开发好的handler与xsd还没法让应用感知到,就这样放上去是没法把前面做的工作纳入体系中的,spring提供了spring.handlers和spring.schemas这两个配置文件来完成这项工作,这两个文件需要我们自己编写并放入META-INF文件夹中,这两个文件的地址必须是META-INF/spring.handlers和META-INF/spring.schemas,spring会默认去载入它们,本例中spring.handlers如下所示:
http\://blog.csdn.net/cutesource/schema/people=study.schemaExt.MyNamespaceHandler
http\://blog.csdn.net/cutesource/schema/people=study.schemaExt.MyNamespaceHandler
http\://blog.csdn.net/cutesource/schema/people.xsd=META-INF/people.xsd
以上就是载入xsd文件
5)在Bean文件中应用
到此为止一个简单的自定义配置以完成,可以在具体应用中使用了。使用方法很简单,和配置一个普通的spring bean类似,只不过需要基于我们自定义schema,本例中引用方式如下所示:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cutesource="http://blog.csdn.net/cutesource/schema/people" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://blog.csdn.net/cutesource/schema/people http://blog.csdn.net/cutesource/schema/people.xsd"> <cutesource:people id="cutesource" name="袁志俊" age="27"/> </beans>
其中xmlns:cutesource="http://blog.csdn.net/cutesource/schema/people"是用来指定自定义schema,xsi:schemaLocation用来指定xsd文件。<cutesource:people id="cutesource" name="zhijun.yuanzj" age="27"/>是一个具体的自定义配置使用实例。
最后就可以在具体程序中使用基本的bean载入方式来载入我们的自定义配置对象了,如:
ApplicationContext ctx = new ClassPathXmlApplicationContext("application.xml"); People p = (People)ctx.getBean("cutesource"); System.out.println(p.getId()); System.out.println(p.getName()); System.out.println(p.getAge());
以上就是一个基于Spring可扩展Schema提供自定义配置支持实战过程,一些复杂应用和技巧还有待挖掘
转载:http://www.cnblogs.com/jifeng/archive/2011/09/14/2176599.html
发表评论
-
ThreadPoolExecutor使用介绍
2012-12-14 16:41 932private static ExecutorService ... -
java调用dll或so文件注意事项
2011-11-15 10:05 5400Java的本地调用jni。调用c为例。在Windows下调 ... -
m2eclipse报错Unable to locate the Javac Compiler in:
2011-03-09 10:21 2445maven test时总报错: Unable to locat ... -
asm操作java(三)
2011-03-04 16:13 27801.Signature: a)说明:J2SE 5.0为了支持范 ... -
asm操作Java(二)
2011-03-04 16:11 82511.类: a)数组: i.创建 ... -
asm操作Java(一)
2011-03-04 16:08 25511.流程控制: a)说明:JVM提供了基本的流程控制结构,这些 ... -
spring多个定时任务quartz配置2
2010-11-27 13:57 167<bean id="cronTrigger_2 ... -
spring多个定时任务quartz配置1
2010-11-27 13:56 172<?xml version="1.0" ... -
JPA注解
2010-11-20 16:11 917JPA注解学习 -
HTTP的status状态值
2010-08-16 10:53 1085长整形标准http状态码,定义如下: Number Descr ... -
HttpClient的相关例子
2010-08-16 09:23 38001、HttpClient使用GET方式通过代理服务器读取页面的 ... -
ContentType 类型大全
2010-07-31 12:37 1206关键字: contenttype ".asf&q ... -
Jboss启动&&停止
2010-05-11 16:53 1364建两个shell脚本start.sh、stop.sh [ro ... -
jxl操作
2010-04-30 11:11 1557import java.io.File; import ja ... -
java对象数组排序
2010-03-24 16:35 1839import java.util.ArrayList; im ... -
文件下载的几种方式
2010-03-19 16:00 812public HttpServletResponse dow ... -
JXL操作Excel
2010-03-02 09:18 978jxl是一个韩国人写的java操作excel的工具, 在开源世 ... -
万能解码器EncodingFilter
2009-12-17 23:24 0/** * $Id: EncodingFilter.jav ... -
java类获取天气预报信息
2009-10-23 18:18 2407网上有很多通过iframe的形式来显示其他网站上的天气预报,这 ... -
图片压缩
2009-09-17 15:19 1129/** * 图片压缩。 * @para ...
相关推荐
Spring Framework 是一个全面的Java应用开发框架,以其模块化、可扩展性和强大的功能而闻名。在4.2.1版本中,它引入了一系列改进和增强,以提升开发效率和应用程序性能。以下是关于“spring framework schema”及其...
在IT领域,Spring框架是Java开发中的核心组件,尤其在企业级应用中广泛使用。Spring AOP(面向切面编程)是Spring框架的一个重要...通过熟练掌握这一技术,开发者可以更好地组织代码,提升代码的可维护性和可扩展性。
Spring 4.0 Schema是Spring框架的一个重要...通过深入理解和使用这些schema,我们可以更好地设计和管理Spring应用,提高代码的可维护性和灵活性。在实际项目中,可以根据需要选择并引用相应的schema,实现所需的功能。
本教程将详细讲解如何实现这一过程,通过创建自定义Schema和处理注解,使得Spring能够自动发布基于注解的WebService服务。 首先,创建一个新的Java项目,并引入必要的依赖。如文中所述,可以使用Maven来创建...
在5.0.1.RELEASE版本中,Spring框架引入了一系列更新和改进,以提升性能、增强可扩展性和提高开发者体验。这个压缩包“spring-framework-5.0.1.RELEASE-schema.zip”包含了与Spring框架相关的XML约束文件,这些文件...
《Spring框架约束文件详解——基于spring-framework-4.3.RELEASE-shcema》 Spring框架是Java开发领域中不可或缺的一部分,它提供了一种强大的、模块化的解决方案,用于构建可维护和可扩展的企业级应用程序。在深入...
这个"spring-mybatis-ssm框架的商城网站ssm-schema.rar"压缩包文件显然包含了构建一个基于SSM框架的电商网站的相关数据库模型和结构。在这里,我们将深入探讨SSM框架的核心组件以及在电商网站中的应用。 首先,...
《Spring Framework 3.2.0.RC2 ...综上所述,Spring Framework 3.2.0.RC2的各模块通过XML Schema进行配置,构建出一个高度灵活、可扩展的开发环境。理解并熟练运用这些模块,将有助于提升Java应用的开发效率和质量。
# 基于Spring Boot和Vue的SaaS多租户管理系统 ## 项目简介 AirbootSaaSDataSource是一个轻量级通用多租户管理系统,支持【共享数据源,独立Schema】和【独立数据源】的SaaS模式,完美支持混合云。租户之间物理隔离...
Spring 的轻量级特性意味着它不强求使用特定的数据库或技术,因此它具有很好的可扩展性。 1. 轻量级:Spring 的核心容器非常小巧,不依赖于特定的服务器或者库,这使得它易于集成到现有的系统中。 2. 无植入:...
《Spring Framework 5.3.14:深度解析与应用》 ...通过对docs、libs和schema的深入理解,开发者可以充分利用其特性,构建出高效、可扩展的系统。无论是新手还是经验丰富的开发者,都能从中受益匪浅。
在实际开发中,这种组合广泛应用于构建企业级的SOA(面向服务架构)系统,提供灵活且可扩展的服务接口。 【压缩包子文件的文件名称列表】中的"cxf.train"可能包含了整个项目的源代码、配置文件以及Maven构建相关的...
每个模块都有其特定的用途和功能,共同构建了Spring Framework的强大生态系统,使得开发者能够构建高度模块化、可扩展且易于维护的企业级应用程序。了解并掌握这些模块的用法对于深入理解Spring框架至关重要。
同时,我们还将讨论系统的安全性和可扩展性,以确保系统的可靠性和可维护性。 本篇论文的主要贡献在于设计和实现了一个基于Spring Boot的共享单车信息系统,提供了一个完整的解决方案,满足用户的需求,提高了用户...
这是Spring框架的核心发行版,包含了所有必要的JAR文件和类库,用于开发基于Spring的应用程序。开发者可以在这里找到`spring-core`、`spring-beans`、`spring-context`、`spring-web`等核心模块,它们提供了依赖...
【硕果云】是一个基于Spring Cloud构建的现代化微服务教学管理平台,旨在为教育机构或个人提供一套完整的教学解决方案。该平台集成了多租户体系、权限管理、在线考试以及练习功能,支持多种题型,包括单选题、多选题...
了解和掌握Spring Framework 4.3.30.RELEASE,意味着开发者能够利用其强大功能构建出高效、可扩展的企业级应用。通过深入学习并实践文档中的示例,可以更好地理解和运用Spring的各种特性和最佳实践,从而提升软件...
总之,RabbitMQ与Spring的整合是企业级应用中常见的实践,它帮助我们构建稳定、可扩展的分布式系统。通过学习和实践这个实战项目,你可以掌握如何利用这两个工具解决实际问题,提升你的IT技能。在实际操作过程中,...
5. **Spring Boot**:虽然不是直接下载包的一部分,但Spring Boot是基于Spring构建现代应用的便捷方式,它简化了设置和配置过程,提供了快速启动应用的能力。 6. **社区支持**:Spring拥有庞大的开发者社区,提供了...
Spring 框架是 Java 开发中的核心框架之一,它为构建高质量的、可扩展的、企业级应用程序提供了全面的编程和配置模型。最新版本的 Spring 框架是 5.3.9.RELEASE,这标志着该框架的稳定性和性能得到了进一步提升。...