`
ronry
  • 浏览: 39875 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spring schema

阅读更多

Spring 2.52.0的基于SchemaBean配置的基础之上,再增加了扩展XML配置的机制。通过该机制,我们可以编写自己的Schema,并根据自定义的Schema用自定的标签配置Bean。要使用的Spring的扩展XML配置机制,也比较简单,有以下4个步骤:

 

  1. 编写自定义Schema文件;
  2. 编写自定义NamespaceHandler
  3. 编写一个或者多个自定义BeanDefinition
  4. Spring中注册上述组建

下面是一块自定义的Bean配置:

myns:dateformat id=”dateFormat” pattern=”yyyy-MM-dd HH:mm”
lenient=”true” />

 

 

 

 

与其等价的常规Bean配置为:

<bean id="dateFormat" class="java.text.SimpleDateFormat">
    <constructor-arg value="yyyy-MM-dd HH:mm" />
    <property name="lenient" value="true" />
</bean>

为了让Spring能识别这段配置,我们需要按上述的4件事。

编写Schema

         对于Schema的内容,可以参见http://www.w3school.com.cn/schema/schema_elements_ref.asp,最终的Schema如下:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/mydateformat" elementFormDefault="qualified">
    <import namespace="http://www.springframework.org/schema/beans" />
    <element name="dateformat">
       <complexType>
           <complexContent>
              <extension base="beans:identifiedType">
                  <attribute name="lenient" type="boolean" />
                  <attribute name="pattern" type="string" use="required" />
              </extension>
           </complexContent>
       </complexType>
    </element>
</schema>
编写NamespaceHandler

         为了让Spring在解析Bean配置时能识别<myns:dateformat>这个标签,我们需要一个自定义的NamespaceHandlerSpringNamespaceHandler接口有3个方法:

  • Init():初始化方法,由Spring调用;
  • BeanDefinition parse(Element ,ParserContext):Spring在解析Bean配置文件遇见顶级的(<myns:dateformat>)标签时调用。该方法可以直接在Spring中注册一个Bean Definition,也可以将Bean Definition返回由其他模块去注册;
  • BeanDefinition decorate(Node, BeanDefinitionHolder, ParserContext):解析过程中遇见attribute或者嵌套的其他命名空间下的element时调用;

在上述3个方法中,只有init()方法是必须的,而其他两个方法则不是必须的,只有在一些特殊情况下才需要用特殊的方式现实它们。为此,Spring提供了一个NamespaceHandlerSupport类,扩展该类就可以轻易得到我们要的自定义NamespaceHandler

 package com.ronry.springtest.schema;

import org.springframework.beans.factory.xml.NamespaceHandlerSupport;

public class MyNamespaceHandler extends NamespaceHandlerSupport {

	@Override
	public void init() {
		this.registerBeanDefinitionParser("dateformat", new SimpleDateFormatBeanDefinitionParser());
	}
}
 
编写自定义的BeanDefinitionParser

         BeanDefinitionParser用来将Bean配置文件解析成相应的BeanDefinition,一般在NamespaceHandler中使用。一般来讲,Bean配置文件,每个顶级的配置元素(例如本例中的<dateformat>)都有一个对应的BeanDefinitionParserSpring也为自定义BeanDefinitionParser提供了很多支持,再一些抽象类的基础上添加少量功能即可满足大部分需求。

 

package com.ronry.springtest.schema;

import java.text.SimpleDateFormat;

import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.w3c.dom.Element;

public class SimpleDateFormatBeanDefinitionParser extends
		AbstractSingleBeanDefinitionParser {
	protected Class<SimpleDateFormat> getBeanClass(Element element){
		return SimpleDateFormat.class;
	}
	
	protected void doParse(Element element,BeanDefinitionBuilder bean){
		String pattern=element.getAttribute("pattern");
		bean.addConstructorArgValue(pattern);
		
		String lenient=element.getAttribute("lenient");
		bean.addPropertyValue("lenient", Boolean.valueOf(lenient));
	}
}

 

Spring中注册

         有了Schema,有了NamespaceHandler,也有了BeanDefinitionParser,但是只有让Spring知道这些组建的存在,它们才能真正开始工作。为了让Spring能检测到这些组建,只需在META-INF目录下添加两个配置文件(spring.handlerspring.schema)即可。

         Spring.handler文件告诉Spring某个name space需要用哪个NamespaceHandler,例如:

http\://www.example.org/mydateformat=com.ronry.springtest.schema.MyNamespaceHandler

 http://www.example.org/mydateformat要与在Schema中定义的一致。

       

spring.schema文件,则告诉Spring从哪加载在Bean定义文件中指定的xsd文件,例如:

http\://www.example.org/schema/dateformat.xsd=com/ronry/springtest/schema/dateformat.sd

 

如果没有这个文件,则Spring将会从网络中查找对应的xsd文件。反过来,有了这个文件也就使得xsd文件就必须和对应的代码一起在JAR包中发布了。

 

         完成了以上的工作之后,Spring就能认识我们自定的Bean的配置了。当然,这只是最简单的对spring xml配置的扩展。更复杂的情况的扩展请听下回分解。

分享到:
评论

相关推荐

    扩展Spring schema样例代码 maven

    本示例代码“扩展Spring schema样例代码 maven”旨在介绍如何在Spring框架中扩展自定义的schema,以及如何在一个Maven项目中整合这些扩展。 首先,让我们深入理解Spring Schema扩展的概念。Spring Schema是Spring ...

    spring framework schema

    以下是关于“spring framework schema”及其相关标签“springschema”的详细知识点: 1. **Schema**: 在Spring Framework中,schema是一种XML配置方式,用于定义bean的行为和依赖关系。例如,`jdbc`、`jms`、`cache...

    spring4.0 schema

    Spring 4.0 Schema是Spring框架的一个重要组成部分,它定义了Spring配置文件的结构和语义,使得开发者可以通过XML配置来声明式地管理应用程序的组件和依赖关系。在这个压缩包中,包含了多个子目录,每个目录对应...

    spring-framework-4.2.4.RELEASE-schema

    《Spring Framework 4.2.4.RELEASE:深入解析Schema》 Spring Framework是Java平台上的一个核心企业级应用框架,以其模块化、可扩展性和强大的功能而闻名。4.2.4.RELEASE版本是该框架的一个重要里程碑,它带来了...

    spring-5.2.9.RELEASE-schema.zip

    本次我们聚焦于"spring-5.2.9.RELEASE-schema.zip"压缩包,通过其包含的子文件,深入探讨Spring 5.2.9版本的关键概念和组件。 1. **Mvc(Model-View-Controller)模块**: Spring MVC是Spring框架的一个重要组成...

    spring jar包

    “所有jar包和schema源文件 很全很全”意味着这个压缩包可能包含了Spring框架的完整集合,包括不同版本的JAR文件,可能还有相关的XML Schema文件。XML Schema(XSD)文件是用于定义XML文档结构和数据类型的规范。在...

    自定义 Schema 解析 Spring Bean

    本篇文章将聚焦于“自定义Schema解析Spring Bean”这一主题,这是一项高级功能,允许开发者扩展Spring的XML配置能力,以满足特定项目的需要。 自定义Schema解析是Spring框架提供的一个强大特性,它允许开发者创建...

    spring-framework-4.2.5-schema

    《Spring Framework 4.2.5 Schema 深度解析》 Spring Framework 是一个全面的Java应用程序开发框架,以其模块化、灵活性和强大的功能而备受赞誉。在4.2.5版本中,Spring引入了对各种XML Schema的支持,极大地简化了...

    最新版完整包 spring-5.3.9.RELEASE-dist.zip

    13. **Spring Schema**:"spring-5.3.9-schema.zip"可能包含了 Spring 框架的 XML 配置的架构文件,这些文件定义了合法的元素和属性,有助于验证和编辑配置文件。 总的来说,Spring 5.3.9.RELEASE 是一个功能丰富且...

    spring-framework-4.3.4.RELEASE-schema

    《Spring Framework 4.3.4.RELEASE Schema详解》 Spring Framework是Java开发中的一个核心框架,它为创建高效、灵活且可测试的Java应用程序提供了强大的支持。在4.3.4.RELEASE版本中,Spring引入了对XML Schema的...

    Spring自定义配置Schema可扩展(二)

    在Spring框架中,自定义配置Schema的扩展是提高应用程序灵活性和可配置性的重要方式。它允许开发者定义自己的XML标签和属性,以适应特定项目的需求。本文将深入探讨Spring自定义配置Schema的可扩展性,特别是在第二...

    Spring自定义配置Schema可扩展(一)

    本教程将详细讲解如何实现这一过程,通过创建自定义Schema和处理注解,使得Spring能够自动发布基于注解的WebService服务。 首先,创建一个新的Java项目,并引入必要的依赖。如文中所述,可以使用Maven来创建...

    spring4.2.0的schema约束

    在Spring框架中,schema约束是XML配置文件中的一个重要组成部分,它们定义了如何正确地配置Spring容器中的各种组件,如bean、property、aop等。Spring 4.2.0是该框架的一个版本,引入了一些新的特性和改进,同时也对...

    解决Myeclipse中spring配置文件无提示.docx

    需要注意的是,不同的Spring版本可能对应不同的Schema文件,例如上述例子中的`spring-beans-2.5.xsd`是Spring 2.5版本的Schema,如果你使用的是其他版本,需要找到相应版本的Schema文件并进行替换。此外,MyEclipse...

    官方原版spring-framework-5.0.4.RELEASE.rar

    11. **Spring Schema**:`spring-framework-5.0.4.RELEASE-schema.zip`可能包含Spring的XML Schema定义,这些定义帮助开发者在编写XML配置时进行验证,确保正确性。 总的来说,Spring Framework 5.0.4.RELEASE是一...

    Spring中自定义Schema如何解析生效详解

    在Spring框架中,自定义Schema允许开发者扩展XML配置,创建自己的标签来定义Bean,从而更加灵活地管理应用程序的配置。Spring 2.5引入了这一特性,使得开发者可以在标准的Spring Schema基础上添加自定义功能。以下是...

    spring-framework-4.1.5.RELEASE-schema.zip

    这个"spring-framework-4.1.5.RELEASE-schema.zip"压缩包包含了Spring框架在不同模块中的XML Schema定义,这些定义帮助开发者以结构化的方式配置Spring应用。 1. **jee**:这个子目录下的文件与Java EE(Enterprise...

    Spring Aop Schema实现

    本篇文章将深入探讨Spring AOP的Schema实现,即基于XML配置的方式来理解和应用AOP。 一、Spring AOP基础概念 1. 切面(Aspect):切面是关注点的模块化,例如日志、事务管理。在Spring AOP中,切面由通知(Advice...

    Spring怎么查找xml和schema约束

    在使用Spring,写核心配置文件的时候都引入了不一样的约束,这里总结关于spring的XML约束+Schema约束。以后不管是仅使用ioc功能还是aop,把全部的约束引入即可。至于说如何找到这些约束的代码的过程,也在这个文档...

Global site tag (gtag.js) - Google Analytics