死磕Spring系列之三,XML解析相关

通过第2章的介绍,应该知道Spring如何从XML一步步解析成BD对象并注册到容器中,这一过程有个概要认识了。

接下来开始详细分析与XML相关的那些事。

一、首先看一下使用的XML文档。

<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
              <beanid="beijingCard"class="com.spring.examples.ioc.bean.Card"  >
                     <propertyname="cardNo"value="6220-52103-4123-456"></property>
                     <propertyname="bank"value="北京银行"/>
              </bean>
              <beanid="jiansheCard"class="com.spring.examples.ioc.bean.Card">
                     <propertyname="cardNo"value="6227-52103-4123-456"></property>
                     <propertyname="bank"value="建设银行"/>
              </bean>
             
              <beanid="miyue"  class="com.spring.examples.ioc.bean.User"primary="true"  scope="singleton">
                     <propertyname="userName"value="芈月"></property>
                     <propertyname="email"value="[email protected]"></property>
                     <propertyname="cardList">
                            <list>
                                          <refbean="beijingCard"/>
                                          <refbean="jiansheCard"/>
                            </list>
                     </property>
              </bean>
</beans>

简单介绍一下XML相关的概念。

XML 指可扩展标记语言.

第一行是 XML 声明。它定义 XML 的版本 (1.0) 和所使用的编码 UTF-8)。

下一行描述文档的根元素<beans>,(像在说:“本文档包含一个多个Bean “):

接下来就是子元素<bean>了。具体标签含义就不说了。

我想说的是文档头部的xmlns=".*",  xmlns:xsi=".*",xsi:schemaLocation=".*"类似字样的一坨代码含义。

这些就是命名空间。

1.命名空间

a)为什么要有命名空间?
XML 命名空间提供避免元素命名冲突的方法。
在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。
b)默认的命名空间(Default Namespaces)
为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。
格式:xmlns="namespaceURI"
c)xsi:schemaLocation
<xsi:schemaLocation="list of anyURI" >
schemaLocation 属性引用具有目标命名空间的 XML 架构文档。
xsi:schemaLocation属性的值由一个URI引用对组成,两个URI之间以空白符分隔。第一个URI是名称空间的名字,第二个URI给出模式文档的位置,模式处理器将从这个位置读取模式文档,该模式文档的目标名称空间必须与第一个URI相匹配

2.XSD (xml Schema Definition)

Xml Schema的用途
1.  定义一个Xml文档中都有什么元素
2.  定义一个Xml文档中都会有什么属性
3.  定义某个节点的都有什么样的子节点,可以有多少个子节点,子节点出现的顺序
4.  定义元素或者属性的数据类型
5.  定义元素或者属性的默认值或者固定值

具体语法,就不讲了,有兴趣的可以搜索。

DTD(Document Type Definition文档类型定义)的作用是定义 XML 文档的合法构建模块。
功能和XSD类似。具体使用如下:
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " http://www.springframework.org/dtd/spring-beans.dtd ">  
XSD,知道即可,spring2.0中使用XSD验证。

二、解析XML需要关注点

1.XML文档如何转换为系统资源

2.使用什么引擎解析

3.解析文档元素,解析为数据载体对象

接下来,我们就一一回答这三个问题。

1.XML文档如何转换为系统资源

public int loadBeanDefinitions(Resource resource) throws BeanDefinitionStoreException {

return loadBeanDefinitions(new EncodedResource(resource));

}

时间: 2024-10-13 01:32:27

死磕Spring系列之三,XML解析相关的相关文章

死磕Spring系列之一:准备阅读Spring源码环境

死磕Spring系列前言 死磕spring系列博客,是对Spring进行源码级阅读.工作以来,一直接触spring框架,可以说对spring框架的配置使用已经非常熟练了.个人感觉:Spring技术非常强大,简单的xml标签配置,就可以开启非常强大的支持功能,囊括J2EE企业应用的方方面面.使用归使用,但是却对spring底层设计和实现,一知半解."到底是什么优秀的设计,能让Spring无所不能,无所不包".最后,就有了我想研读Spring 源码的动力. 阅读任何任何一门框架源码,其实和

死磕Spring系列之四 BeanDefinition接口、BeanFactory接口

通过前面的介绍,相信大家对bean的解析,注册的整体流程了解了,知道Spring怎么一步步将xml文档内的配置信息纳入容器中.有几个非常重要的接口,不得不谈. 1.BeanDefinition接口 这个接口,可以理解为xml bean元素的数据载体.通过对比xml bean标签的属性列表和BeanDefinition的属性列表一看便知. 我的理解,是解析XML的过程,就是 xml <bean>元素内容 转换为BeanDefinition对象的过程.而且这个接口,支持层级,对应对象的继承. 有一

死磕Spring AOP系列4:剖析AOP schema方式原理

这个是<死磕Spring AOP系列>第4个.已经讲过的内容 死磕Spring AOP系列3:剖析Bean处理器之DefaultAdvisorAutoProxyCreator 死磕Spring AOP系列2:剖析Bean处理器之BeanNameAutoProxyCreator 死磕Spring AOP系列1:编程式实现AOP 通过前3篇,大家应该可以清楚的知道:AOP代理原理有3元素 BeanPostProcessor,作为代理对象初始入口 Advisor&Pointcut&M

死磕Spring AOP系列1:编程式实现AOP

作为[死磕Spring AOP]系列的第一篇, 这个系列是AOP源码分析级别的文章.由于现在AOP已经不是什么高深的技术,网上的例子也比比皆是,不论是xml schema,还是annotation声明式.相信用过Spring的朋友,都可以信手拈来. 本系列文章的原则 如何配置AOP不是重点 AOP相关概念讲解不是重点 AOP 底层代码设计才是重点 本篇的主要内容 认识ProxyFactory,并通过该工厂类,将"日志"和"安全校验"代码切入到业务逻辑中 分析代理对象

死磕Spring AOP系列2:剖析Bean处理器之BeanNameAutoProxyCreator

通过前一篇<死磕Spring AOP系列1:编程式实现AOP>,学习了Spring对代理的底层支持,认识了ProxyFactory对象,及从类设计层面认识了PointCut&Advisor&Advice&Interceptor,还认识了AdvisorChainFactory对象,知道了底层Advisor的底层链式结构.但是,上篇我们仅仅是通过Spring编程式实现的"AOP"效果,这种方式,实际开发时,如果这样用就太LOW了.今天,主要认识一个生成代

死磕Spring AOP系列5:设计模式在AOP中的使用

死磕Spring AOP系列3:剖析Bean处理器之DefaultAdvisorAutoProxyCreator 死磕Spring AOP系列2:剖析Bean处理器之BeanNameAutoProxyCreator 死磕Spring AOP系列1:编程式实现AOP 死磕Spring AOP系列4:剖析AOP schema方式原理 通过前面的死磕,应该对AOP的原理都掌握了.annotation配置AOP,再没有讲的必要了.annotation和xml schema两种方式,仅仅是声明方式不同而已

死磕Spring AOP系列3:剖析Bean处理器之DefaultAdvisorAutoProxyCreator

导航 死磕Spring AOP系列1:编程式实现AOP 死磕Spring AOP系列2:剖析Bean处理器之BeanNameAutoProxyCreator 这是<死磕Spring AOP系列>的第三篇.经过前面的讲解,已经掌握了以下知识点 Spring AOP的底层支持,是基于ProxyFactory+ProxyConfig+Advisor生成的 Spring容器的代理对象生成:在Bean生命周期过长中调用BeanPostProcessor,将对象进行包装,生成代理对象. Advisor的指

死磕 Java 系列(一)&mdash;&mdash; 常用类(1) String 源码解析

写在前面 这是博主新开的一个 java 学习系列,听名字就可以看出来,在这一些系列中,我们学习的知识点不再是蜻蜓点水,而是深入底层,深入源码.由此,学习过程中我们要带着一股钻劲儿,对我们不懂的知识充满质疑,力求把我们学过的知识点都搞清楚,想明白. 一.引言 在 java 的世界里,存在一种特殊的类,它们的创建方式极为特别,不需要用到 new XXX(当然也可以用这种方式创建), 但是却大量出现在我们的代码中,那就是 String 类.作为日常中使用频率最高的类,它是那么普通,普通到我们从来都不会

【死磕 Spring】----- IOC 之 获取验证模型

原文出自:http://cmsblogs.com 在上篇博客[死磕Spring]----- IOC 之 加载 Bean 中提到,在核心逻辑方法 doLoadBeanDefinitions()中主要是做三件事情. 调用 getValidationModeForResource() 获取 xml 文件的验证模式 调用 loadDocument() 根据 xml 文件获取相应的 Document 实例. 调用 registerBeanDefinitions() 注册 Bean 实例. 这篇博客主要分析