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

Spring Schema(2)

阅读更多

在前文《Spring Schema》中讲述了如何使用Spring Ext功能,但并未具体讲其内如原理。本篇进行一些补充。

要研究spring ext的实现原理就需要研究下解析xml文件生成相应的BeanDefination的过程了。下面的类图是与load BeanDefinition相关的主要的类:



 <!--[endif]-->

其中与Spring EXT相关的主要是NamespaceHandlerResolverResourceEntityResolver两个类。

         ResourceEntityResolver类由BeansDtdResolverPluggableSchemaResolver组成,用以在classpath下搜寻schemaDTD文件。而其中的PluggableSchemaResolver有一个schemaMappingsLocation属性其值为写死的META-INF/spring.schemas,这就找到了我们上面第四步里写的spring.schemas文件了。PluggableSchemaResolver把扫描到的schema存储在属性Map<String, String> schemaMappings中。除了在spring.schemas中自定义的schema外,PluggableSchemaResolver还会自动将spring默认的schema也扫面进来。例如:

 

{http://www.springframework.org/schema/lang/spring-lang-3.0.xsd=org/springframework/scripting/config/spring-lang-3.0.xsd,
http://www.example.org/mydateformat/mydateformat.xsd=com/ronry/springtest/schema/mydateformat.xsd,
http://www.springframework.org/schema/lang/spring-lang-2.5.xsd=org/springframework/scripting/config/spring-lang-2.5.xsd,
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd=org/springframework/aop/config/spring-aop-2.0.xsd,
http://www.springframework.org/schema/lang/spring-lang-2.0.xsd=org/springframework/scripting/config/spring-lang-2.0.xsd,
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd=org/springframework/aop/config/spring-aop-2.5.xsd,
http://www.springframework.org/schema/task/spring-task.xsd=org/springframework/scheduling/config/spring-task-3.0.xsd,
http://www.springframework.org/schema/jee/spring-jee.xsd=org/springframework/ejb/config/spring-jee-3.0.xsd}

    (省略大部)

 

         类似,DefaultNamespaceHandlerResolver中也有一个属性handlerMappingsLocation其默认值为META-INF/spring.handlers,这也是我们第四步骤定义的文件。也同样有一个属性handlerMappings存储了namespace对应的handler,例如:

 

{http://www.example.org/mydateformat=com.ronry.springtest.schema.MyNamespaceHandler,
http://www.springframework.org/schema/aop=org.springframework.aop.config.AopNamespaceHandler,
http://www.springframework.org/schema/util=org.springframework.beans.factory.xml.UtilNamespaceHandler,
http://www.springframework.org/schema/p=org.springframework.beans.factory.xml.SimplePropertyNamespaceHandler,
http://www.springframework.org/schema/task=org.springframework.scheduling.config.TaskNamespaceHandler,
http://www.springframework.org/schema/lang=org.springframework.scripting.config.LangNamespaceHandler,
http://www.springframework.org/schema/context=org.springframework.context.config.ContextNamespaceHandler,
http://www.springframework.org/schema/jee=org.springframework.ejb.config.JeeNamespaceHandler}
 

 

这其中也已经包括了自定义的handlerspring默认的一些handler

         有了这些信息后,在解析bean定义的xml文件时,当遇到非默认命名空间(beans)的元素时,就按如下过程进行解析:

 

  1. 从元素中解析出nameSpaceUri;
  2. 根据nameSpaceUri,从DefaultNamespaceHandlerResolver中获取其对应的Handler加载Handler并 调用其init()方法;我们实现的MyNamespaceHandler在其inti()方法中注册了dataFormat标签的parser
  3. 调用handlerparser方法解析元素,具体又分为以下几步:

          1) 查找元素名对应的parser

          2)调用找到的parserparse()方法;

详细的解析过程如下图:


 <!--[endif]-->

         另外,还有一点想说的是BeanDefinitionParser的继承体系。自定的BeanDefinitionParser一般继承自AbstractSingleBeanDefinitionParser,其又继承自AbstractBeanDefinitionParser,如图:



 <!--[endif]-->

这个继承体系充分使用了模板方法的设计模式。调用时,会调用AbstractBeanDefinitionParserparse()方法,这也是BeanDefinitionParser接口定义的方法。parse()方法中调用parseInternal()方法,而该方法在AbstractBeanDefinitionParser只是个抽象方法,具体定义只有在AbstractSingleBeanDefinitionParser中才有。AbstractSingleBeanDefinitionParserparseInternal方法又会调用getBeanClass()doParse()方法,这两个在AbstractSingleBeanDefinitionParser也都是抽象方法(或者是return null的方法),需要在定义的Parser中覆盖。

  • 大小: 53 KB
  • 大小: 65 KB
  • 大小: 42 KB
分享到:
评论

相关推荐

    扩展Spring schema样例代码 maven

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

    spring schema

    标题“spring schema”涉及到的是Spring框架中的XML Schema配置,这是Spring框架早期常用的一种配置方式,用于定义和管理Bean的生命周期和依赖关系。Spring XML Schema提供了一种结构化的、可读性更强的方式来替代纯...

    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配置来声明式地管理应用程序的组件和依赖关系。在这个压缩包中,包含了多个子目录,每个目录对应...

    自定义 Schema 解析 Spring Bean

    2. **注册Schema**: 在Spring的配置文件中,引入自定义的Schema,以便Spring能够识别并解析这些自定义元素。这通常通过在XML文件头部添加`&lt;xs:schemaLocation&gt;`属性来完成。 ```xml &lt;beans xmlns="http://www....

    spring-framework-4.2.5-schema

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

    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-framework-4.3.4.RELEASE-schema

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

    spring4.2.0的schema约束

    2. **Schema定义**:Spring的schema是一组预定义的规则,用于验证XML配置文件中的元素和属性。这些规则在Spring的JAR文件中以`.xsd`(XML Schema Definition)文件的形式存在,例如`spring-beans.xsd`、`spring-...

    spring-framework-4.1.4.release-schema

    2. **beans**: `beans`目录下的Schema文件是Spring的核心,它定义了如何声明和管理Bean的规则。例如,元素、元素等,用于定义类实例化、依赖注入以及属性设置。 3. **jdbc**: JDBC模块提供了数据库访问的抽象层,...

    Spring怎么查找xml和schema约束

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

    Spring Aop Schema实现

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

    spring jar包

    2. **AOP(面向切面编程)**:Spring提供了AOP支持,允许开发者定义拦截器来实现跨切面的关注点,如日志记录、事务管理等。 3. **数据访问集成**:Spring支持多种数据访问技术,如JDBC、ORM(对象关系映射)框架如...

    spring-framework-4.1.5.RELEASE-schema.zip

    2. **jdbc**:这部分内容涉及Spring对Java数据库连接(JDBC)的支持。Spring通过提供JdbcTemplate和NamedParameterJdbcTemplate等工具类,简化了JDBC操作,提高了代码的可读性和可测试性。XML Schema定义了如何配置...

    spring-framework-4.1.0.RELEASE-schema.zip

    Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合...

    spring-framework-4.1.6.RELEASE-schema.zip

    《Spring Framework 4.1.6.RELEASE Schema详解》 Spring Framework是Java开发中的核心框架,它为构建高质量、可维护、可扩展的应用程序提供了全面的解决方案。在4.1.6.RELEASE版本中,Spring引入了对XML Schema的...

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

    2. **模块化**:自定义Schema可以帮助将特定功能封装成独立的模块,减少核心配置的复杂度。 3. **灵活性**:通过自定义Schema,可以轻松添加新的配置选项,适应项目的演进需求。 总结来说,Spring自定义配置Schema...

    最新版spring-framework-5.0.1.RELEASE-schema.zip约束

    这个压缩包“spring-framework-5.0.1.RELEASE-schema.zip”包含了与Spring框架相关的XML约束文件,这些文件定义了配置文件中的元素和属性,确保了正确和一致的配置。 1. **mvc** - 这部分涉及到Spring MVC(Model-...

    spring_MVC源码

    05. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 06. ...

Global site tag (gtag.js) - Google Analytics