激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Spring中Xml屬性配置的解析全過程記錄

Spring中Xml屬性配置的解析全過程記錄

2021-08-24 11:51籃戰(zhàn)丶 Java教程

這篇文章主要給大家介紹了關(guān)于Spring中Xml屬性配置的解析全過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1 工程概述

Spring中Xml屬性配置的解析全過程記錄

1.1 pom文件

  1. <properties>
  2. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  3. <maven.compiler.source>1.8</maven.compiler.source>
  4. <maven.compiler.target>1.8</maven.compiler.target>
  5. <spring.version>5.2.8.RELEASE</spring.version>
  6. </properties>
  7.  
  8. <dependencies>
  9. <dependency>
  10. <groupId>junit</groupId>
  11. <artifactId>junit</artifactId>
  12. <version>4.13</version>
  13. </dependency>
  14. <dependency>
  15. <groupId>org.springframework</groupId>
  16. <artifactId>spring-context</artifactId>
  17. <version>${spring.version}</version>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.projectlombok</groupId>
  21. <artifactId>lombok</artifactId>
  22. <version>1.16.20</version>
  23. </dependency>
  24. <!-- 日志相關(guān)依賴 -->
  25. <dependency>
  26. <groupId>org.slf4j</groupId>
  27. <artifactId>slf4j-api</artifactId>
  28. <version>1.7.10</version>
  29. </dependency>
  30. <dependency>
  31. <groupId>ch.qos.logback</groupId>
  32. <artifactId>logback-classic</artifactId>
  33. <version>1.1.2</version>
  34. </dependency>
  35. <dependency>
  36. <groupId>ch.qos.logback</groupId>
  37. <artifactId>logback-core</artifactId>
  38. <version>1.1.2</version>
  39. </dependency>
  40. </dependencies>

1.2 applicationContext.xml

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xsi:schemaLocation="
  5. http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context.xsd"
  9. default-lazy-init="false">
  10.  
  11. <bean id="student" class="com.rosh.bean.StudentBean"/>
  12.  
  13. <context:component-scan base-package="com.rosh.service"/>
  14.  
  15. </beans>

1.3 StudentBean

  1. @Data
  2. @AllArgsConstructor
  3. @NoArgsConstructor
  4. @ToString
  5. public class StudentBean {
  6.  
  7. private String name = "rosh";
  8.  
  9. private String school = "杜橋中學(xué)";
  10.  
  11. private String hobby = "籃球";
  12.  
  13. }

1.4 RoshTest

  1. public class RoshTest {
  2.  
  3. @Test
  4. public void mainTest(){
  5. ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
  6. StudentBean student = applicationContext.getBean(StudentBean.class);
  7. System.out.println(student.toString());
  8.  
  9. }
  10. }

1.5 運(yùn)行結(jié)果

Spring中Xml屬性配置的解析全過程記錄

2 流程解析

2.1 源碼Debug

描述:調(diào)用構(gòu)造方法中的refresh方法

Spring中Xml屬性配置的解析全過程記錄

描述:調(diào)用AbstractApplicationContext refresh()方法進(jìn)行xml解析

Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄

重點(diǎn): 創(chuàng)建XML對象的解析器

Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄

重點(diǎn): 用xml文件解析器把xml文件轉(zhuǎn)換成Reource對象

Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄

重點(diǎn): Resource對象轉(zhuǎn)Document對象

Spring中Xml屬性配置的解析全過程記錄

**重點(diǎn):**創(chuàng)建Document解析器

Spring中Xml屬性配置的解析全過程記錄

Spring中Xml屬性配置的解析全過程記錄

總結(jié): DefaultBeanDefinitionDocumentReader(Document解析器)解析xml文件

Spring中Xml屬性配置的解析全過程記錄

2.2 總結(jié)流程

大概步驟:

(1) 構(gòu)造。

(2) 刷新工廠。

(3) 創(chuàng)建xml對象解析器。

(4) 將xml解析成Resource對象。

(5) Resource轉(zhuǎn)Document。

(6) 創(chuàng)建Document對象解析器。

(7) 解析Document對象。

詳細(xì)步驟:

  1. 1 ClassPathXmlApplicationContext調(diào)用構(gòu)造方法。
  2. 2 AbstractApplicationContext
  3. (1) 調(diào)用refresh()方法。
  4. (2) 調(diào)用obtainFreshBeanFactory()方法。
  5. 3 AbstractRefreshableApplicationContext調(diào)用refreshBeanFactory() 方法。
  6. 4 AbstractXmlApplicationContext
  7. (1) loadBeanDefinitions(DefaultListableBeanFactory beanFactory)方法。創(chuàng)建XML解析器。
  8. (2) 調(diào)用loadBeanDefinitions(XmlBeanDefinitionReader reader)方法。
  9. 5 AbstractBeanDefinitionReader
  10. (1) loadBeanDefinitions(String... locations)方法。
  11. (2) loadBeanDefinitions(String location)方法。
  12. (3) loadBeanDefinitions(String location, @Nullable Set<Resource> actualResources)方法,將XML解析成Resource對象。
  13. (4) loadBeanDefinitions(Resource... resources)方法。
  14. 6 XmlBeanDefinitionReader:
  15. (1) loadBeanDefinitions(Resource resource) 方法。
  16. (2) loadBeanDefinitions(EncodedResource encodedResource) 方法。
  17. (3) doLoadBeanDefinitions(InputSource inputSource, Resource resource)方法。
  18. (4) registerBeanDefinitions(Document doc, Resource resource)方法。創(chuàng)建Document解析器。
  19. 7 DefaultBeanDefinitionDocumentReader
  20. (1) registerBeanDefinitions(Document doc, XmlReaderContext readerContext)方法。
  21. (2) doRegisterBeanDefinitions(Element root)方法。
  22. (3) parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) 方法解析默認(rèn)標(biāo)簽、自定義標(biāo)簽。

3 解析Bean標(biāo)簽

Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄

4 自定義標(biāo)簽解析

4.1 步驟

1. 獲取自定義標(biāo)簽的 namespace 命令空間,例如:http://www.springframework.org/schema/context
2. 根據(jù)命令空間獲取 NamespaceHandler 對象通過 SPI 機(jī)制獲取 spring 中所有 jar 包里面的 "META-INF/spring.handlers"
文件,并且建立映射關(guān)系
3. 反射獲取 NamespaceHandler 實(shí)例
4. 調(diào)用對應(yīng)標(biāo)簽如 ContextNameHandler 標(biāo)簽的 init()方法
5. 調(diào)用 handler.parse()方法完成解析

4.2 流程解析

1 根據(jù)自定義標(biāo)簽尋找相應(yīng)的uri

Spring中Xml屬性配置的解析全過程記錄

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

Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄

3 根據(jù)applicationContext.xml 找對應(yīng)的Hadnler

Spring中Xml屬性配置的解析全過程記錄

4.3 Debug

Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄

Spring中Xml屬性配置的解析全過程記錄

Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄
Spring中Xml屬性配置的解析全過程記錄

總結(jié)

到此這篇關(guān)于Spring中Xml屬性配置解析的文章就介紹到這了,更多相關(guān)Spring Xml屬性配置解析內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/qq_34125999/article/details/114740545

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 8x成人在线电影 | 日韩黄色片免费看 | 美女黄污视频 | 国产精品亚洲一区二区三区在线观看 | 高清一区二区在线观看 | 成人激情视频网 | 成人永久视频 | 欧洲精品色 | 亚州成人在线观看 | 黄www片 | 成人在线观看网 | 蜜桃久久一区二区三区 | 91短视频版高清在线观看免费 | www.54271.com| 草逼一区| 理论片中文字幕 | 亚洲午夜视频 | 港台三级在线观看 | 国产欧美亚洲精品 | 国产成人在线一区 | 中文字幕综合在线观看 | 精品久久久久久久久久久αⅴ | 视频一区二区三区视频 | 在线播放免费视频 | 99国产精成人午夜视频一区二区 | xxxxxx性| 欧美成人精品一区二区三区 | 国产一级淫片在线观看 | 爱爱插插视频 | 久久国产一二三 | 在线成人免费观看视频 | 成av在线| 美女污污视频在线观看 | 免费三级大片 | 在线观看中文字幕国产 | 欧美大荫蒂xxx | 欧美一区高清 | 免费a视频在线观看 | 国产精品aⅴ | 免费毛片免费看 | 黄色免费入口 |