欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年03月16日 09:35:15   作者:籃戰(zhàn)丶  
這篇文章主要給大家介紹了關(guān)于Spring中Xml屬性配置的解析全過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1 工程概述

1.1 pom文件

<properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <maven.compiler.source>1.8</maven.compiler.source>
 <maven.compiler.target>1.8</maven.compiler.target>
 <spring.version>5.2.8.RELEASE</spring.version>
 </properties>

 <dependencies>
 <dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.13</version>
 </dependency>
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>${spring.version}</version>
 </dependency>
 <dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.16.20</version>
 </dependency>
 <!-- 日志相關(guān)依賴 -->
 <dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.10</version>
 </dependency>
 <dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.1.2</version>
 </dependency>
 <dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-core</artifactId>
  <version>1.1.2</version>
 </dependency>
 </dependencies>

1.2 applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="
	http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context.xsd"
 default-lazy-init="false">


 <bean id="student" class="com.rosh.bean.StudentBean"/>

 <context:component-scan base-package="com.rosh.service"/>

</beans>

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 運行結(jié)果

2 流程解析

2.1 源碼Debug

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

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



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



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


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

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

總結(jié): DefaultBeanDefinitionDocumentReader(Document解析器)解析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對象。

詳細步驟:

1 ClassPathXmlApplicationContext調(diào)用構(gòu)造方法。
2 AbstractApplicationContext:
 (1) 調(diào)用refresh()方法。
 (2) 調(diào)用obtainFreshBeanFactory()方法。
3 AbstractRefreshableApplicationContext調(diào)用refreshBeanFactory() 方法。
4 AbstractXmlApplicationContext:
	(1) loadBeanDefinitions(DefaultListableBeanFactory beanFactory)方法。創(chuàng)建XML解析器。
 (2) 調(diào)用loadBeanDefinitions(XmlBeanDefinitionReader reader)方法。
5 AbstractBeanDefinitionReader:
	(1) loadBeanDefinitions(String... locations)方法。  
	(2) loadBeanDefinitions(String location)方法。
	(3) loadBeanDefinitions(String location, @Nullable Set<Resource> 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)方法。創(chuàng)建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. 根據(jù)命令空間獲取 NamespaceHandler 對象通過 SPI 機制獲取 spring 中所有 jar 包里面的 "META-INF/spring.handlers"
文件,并且建立映射關(guān)系
3. 反射獲取 NamespaceHandler 實例
4. 調(diào)用對應標簽如 ContextNameHandler 標簽的 init()方法
5. 調(diào)用 handler.parse()方法完成解析

4.2 流程解析

1 根據(jù)自定義標簽尋找相應的uri

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


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

4.3 Debug







總結(jié)

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

相關(guān)文章

  • Mybatis圖文并茂講解分頁插件

    Mybatis圖文并茂講解分頁插件

    使用過mybatis的人都知道,mybatis本身就很小且簡單,sql寫在xml里,統(tǒng)一管理和優(yōu)化。缺點當然也有,比如我們使用過程中,要使用到分頁,如果用最原始的方式的話,1.查詢分頁數(shù)據(jù),2.獲取分頁長度,也就是說要使用到兩個方法才能完成分頁
    2022-07-07
  • java文件下載設置中文名稱的實例(response.addHeader)

    java文件下載設置中文名稱的實例(response.addHeader)

    下面小編就為大家分享一篇java文件下載設置中文名稱的實例(response.addHeader),具有很好的參考價值,希望對大家有所幫助
    2017-12-12
  • idea maven 構(gòu)建本地jar包及pom文件的過程

    idea maven 構(gòu)建本地jar包及pom文件的過程

    這篇文章主要介紹了idea maven 構(gòu)建本地jar包及pom文件的過程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • Java 解析XML數(shù)據(jù)的4種方式

    Java 解析XML數(shù)據(jù)的4種方式

    這篇文章主要介紹了Java 解析XML數(shù)據(jù)的4種方式,幫助大家更好的用Java處理數(shù)據(jù),感興趣的朋友可以了解下
    2020-09-09
  • 一文詳解Java屬性為什么不能是is開頭的boolean

    一文詳解Java屬性為什么不能是is開頭的boolean

    在Java實體類定義中,boolean類型的屬性命名常引發(fā)爭議,阿里巴巴Java開發(fā)手冊建議避免使用is作為布爾類型屬性的前綴,原因在于當實體類被序列化或反序列化時,基于JavaBean規(guī)范的框架可能會移除或忽略is,導致不一致的字段名,文中介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • maven-assembly-plugin報紅無法加載報錯:Plugin?‘maven-assembly-plugin:‘?not?found

    maven-assembly-plugin報紅無法加載報錯:Plugin?‘maven-assembly-plugin

    maven-assembly-plugin是一個常用的打包插件,但是在使用過程中經(jīng)常會遇到各種報錯,本文就來介紹一下maven-assembly-plugin報紅無法加載報錯,具有一定的參考價值
    2023-08-08
  • 如何用Jfinal連接多個數(shù)據(jù)庫

    如何用Jfinal連接多個數(shù)據(jù)庫

    這篇文章主要介紹了如何用Jfinal連接多個數(shù)據(jù)庫,幫助大家更好的理解和學習使用Jfinal,感興趣的朋友可以了解下
    2021-03-03
  • 原生java代碼實現(xiàn)碼云第三方驗證登錄的示例代碼

    原生java代碼實現(xiàn)碼云第三方驗證登錄的示例代碼

    這篇文章主要介紹了原生java代碼實現(xiàn)碼云第三方驗證登錄的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • java實現(xiàn)文件保存到本地的方法

    java實現(xiàn)文件保存到本地的方法

    本篇文章主要介紹了java實現(xiàn)文件保存到本地的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • idea?http?request無法識別環(huán)境變量的解決步驟

    idea?http?request無法識別環(huán)境變量的解決步驟

    AlibabaCloudToolkit插件安裝后在?Editor->File?Types增加?AlibabaCloudROStemplates(JSON)項且會配置為解析*.json?文件,導致http?client無法正確解析http-client.env.json文件而無法讀取環(huán)境變量,本文介紹idea?http?request無法識別環(huán)境變量問題,需要的朋友可以參考下
    2023-08-08

最新評論