热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Spring中Xml属性配置的解析全过程记录

这篇文章主要给大家介绍了关于Spring中Xml属性配置的解析全过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1 工程概述

1.1 pom文件


 UTF-8
 1.8
 1.8
 5.2.8.RELEASE
 

 
 
  junit
  junit
  4.13
 
 
  org.springframework
  spring-context
  ${spring.version}
 
 
  org.projectlombok
  lombok
  1.16.20
 
 
 
  org.slf4j
  slf4j-api
  1.7.10
 
 
  ch.qos.logback
  logback-classic
  1.1.2
 
 
  ch.qos.logback
  logback-core
  1.1.2
 
 

1.2 applicationContext.xml




 

 


1.3 StudentBean

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class StudentBean {


 private String name = "rosh";

 private String school = "杜桥中学";

 private String hobby = "篮球";

}

1.4 RoshTest

public class RoshTest {

 @Test
 public void mainTest(){
 ClassPathXmlApplicationContext applicatiOnContext=new ClassPathXmlApplicationContext("applicationContext.xml");
 StudentBean student = applicationContext.getBean(StudentBean.class);
 System.out.println(student.toString());

 }
}

1.5 运行结果

2 流程解析

2.1 源码Debug

描述:调用构造方法中的refresh方法

描述:调用AbstractApplicationContext refresh()方法进行xml解析



重点: 创建XML对象的解析器



重点: 用xml文件解析器把xml文件转换成Reource对象


重点: Resource对象转Document对象

**重点:**创建Document解析器

总结: DefaultBeanDefinitionDocumentReader(Document解析器)解析xml文件

2.2 总结流程

大概步骤:

(1) 构造。

(2) 刷新工厂。

(3) 创建xml对象解析器。

(4) 将xml解析成Resource对象。

(5) Resource转Document。

(6) 创建Document对象解析器。

(7) 解析Document对象。

详细步骤:

1 ClassPathXmlApplicationContext调用构造方法。
2 AbstractApplicationContext:
 (1) 调用refresh()方法。
 (2) 调用obtainFreshBeanFactory()方法。
3 AbstractRefreshableApplicationContext调用refreshBeanFactory() 方法。
4 AbstractXmlApplicationContext:
	(1) loadBeanDefinitions(DefaultListableBeanFactory beanFactory)方法。创建XML解析器。
 (2) 调用loadBeanDefinitions(XmlBeanDefinitionReader reader)方法。
5 AbstractBeanDefinitionReader:
	(1) loadBeanDefinitions(String... locations)方法。  
	(2) loadBeanDefinitions(String location)方法。
	(3) loadBeanDefinitions(String location, @Nullable Set actualResources)方法,将XML解析成Resource对象。	
	(4) loadBeanDefinitions(Resource... resources)方法。
6 XmlBeanDefinitionReader:
	(1) loadBeanDefinitions(Resource resource) 方法。
	(2) loadBeanDefinitions(EncodedResource encodedResource) 方法。
	(3) doLoadBeanDefinitions(InputSource inputSource, Resource resource)方法。
	(4)	registerBeanDefinitions(Document doc, Resource resource)方法。创建Document解析器。
7 DefaultBeanDefinitionDocumentReader:
 (1) registerBeanDefinitions(Document doc, XmlReaderContext readerContext)方法。
 (2) doRegisterBeanDefinitions(Element root)方法。
 (3) parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) 方法解析默认标签、自定义标签。

3 解析Bean标签





4 自定义标签解析

 4.1 步骤

1. 获取自定义标签的 namespace 命令空间,例如:http://www.springframework.org/schema/context
2. 根据命令空间获取 NamespaceHandler 对象通过 SPI 机制获取 spring 中所有 jar 包里面的 "META-INF/spring.handlers"
文件,并且建立映射关系
3. 反射获取 NamespaceHandler 实例
4. 调用对应标签如 ContextNameHandler 标签的 init()方法
5. 调用 handler.parse()方法完成解析

4.2 流程解析

1 根据自定义标签寻找相应的uri

2 加载spring中全部MET-INF/spring.handlers


3 根据applicationContext.xml 找对应的Hadnler

4.3 Debug







总结

到此这篇关于Spring中Xml属性配置解析的文章就介绍到这了,更多相关Spring Xml属性配置解析内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • ABBYY FineReader:高效PDF转换、精准OCR识别与文档对比工具
    在处理PDF转换和OCR识别时,您是否遇到过格式混乱、识别率低或图表无法正常识别的问题?ABBYY FineReader以其强大的功能和高精度的识别技术,完美解决这些问题,帮助您轻松找到最终版文档。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • ArcXML:互联网空间数据交换的专用语言
    ArcXML是一种专为ArcIMS平台设计的数据交换协议,基于XML标准,用于在不同组件之间传输和描述地理空间数据。本文将详细介绍ArcXML的背景、用途及其与XML的关系。 ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • 优化Jenkins首次启动速度
    本文详细描述了在启动Jenkins后遇到的长时间加载问题,并提供了一种通过修改更新中心配置文件来显著提升启动速度的有效解决方案。 ... [详细]
  • 远程过程调用(RPC)是一种允许客户端通过网络请求服务器执行特定功能的技术。它简化了分布式系统的交互,使开发者可以像调用本地函数一样调用远程服务,并获得返回结果。本文将深入探讨RPC的工作原理、发展历程及其在现代技术中的应用。 ... [详细]
  • 本文详细介绍了 Android 开发中 layout_gravity 属性的使用方法及其在不同布局下的效果,旨在帮助开发者更好地理解和利用这一属性来精确控制视图的布局。 ... [详细]
  • 本文探讨了如何在Java中使用JAXB解组两个具有相同名称但不同结构的对象。我们将介绍一个抽象类Bar及其具体实现,并展示如何正确地解析XML文档以获取正确的对象实例。 ... [详细]
  • Python3 中使用 lxml 模块解析 XPath 数据详解
    XPath 是一种用于在 XML 文档中查找信息的路径语言,同样适用于 HTML 文件的搜索。本文将详细介绍如何利用 Python 的 lxml 模块通过 XPath 技术高效地解析和抓取网页数据。 ... [详细]
  • springMVC JRS303验证 ... [详细]
  • 本文详细介绍了如何正确配置Java环境变量PATH,以确保JDK安装完成后能够正常运行。文章不仅涵盖了基本的环境变量设置步骤,还提供了针对不同操作系统下的具体操作指南。 ... [详细]
  • 本文将详细介绍通过CAS(Central Authentication Service)实现单点登录的原理和步骤。CAS由耶鲁大学开发,旨在为多应用系统提供统一的身份认证服务。文中不仅涵盖了CAS的基本架构,还提供了具体的配置实例,帮助读者更好地理解和应用这一技术。 ... [详细]
author-avatar
wjwakx5792
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有