最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一個簡單的Spring容器初始化流程詳解

 更新時間:2021年01月23日 11:28:28   作者:可樂可樂可  
這篇文章主要給大家介紹了一個簡單的Spring容器初始化流程的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

首先我們初始化一個最簡單的容器,用這個容器研究初始化的流程。

下面就是一個再簡單不過的IoC容器了,該容器包含了一個名為beanA的bean,我們初始化容器后,取出該Bean,并調用方法。

public class BeanA {
 private String testStr = "Test";
 public BeanA(){
  System.out.println("Running A");
 }
 public void sayHello(){
  System.out.println("I'm beanA.");
 }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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.xsd">

 <bean id="beanA" class="cn.jirath.learn.spring.BeanA">
 </bean>
</beans>
@Test
void testHello(){
 Resource springResource=new ClassPathResource("spring-beans.xml");
 BeanFactory beanFactory=new XmlBeanFactory(springResource);
 BeanA beanA= (BeanA) beanFactory.getBean("beanA");
	beanA.sayHello();
}

雖然XmlBeanFactory已經(jīng)被Spring標記為過時,但是為了達到我們從一個xml定義的bean信息構造一個BeanFactory的目的,勉為其難,還是先用一下233。

這段代碼很簡單,但是反映了我們使用IoC的一個基礎流程:

  1. 選擇并構建數(shù)據(jù)源
  2. 利用數(shù)據(jù)源構建一個容器
  3. 取出Bean使用

我們就先從這幾點一點點講

在開始之前,需要意識到的是:Spring作為一款優(yōu)秀的面向對象的框架設計,Spring中采用了大量的設計模式并按照面向對象的邏輯對各個類進行設計,做到了各個類功能單一。

這意味著,Spring的代碼會有一種剝洋蔥的感覺,子類對雙親擴展,調用默認實現(xiàn)。

選擇并構建數(shù)據(jù)源

構建數(shù)據(jù)源的部分難度不大,會稍微簡單點講

這里推薦一本書:《Spring源碼深度解析(第2版)》

看了Spring的設計,這是真的面向對象。

Spring一開始是使用大量的xml文件配置了容器。從面向對象的角度思考,為了方便使用,需要將各種資源都被抽象出來,先看一下他的資源類結構體系。該部分是系統(tǒng)最底層,在core包中

InputStreamSource封裝能返回InputStream的類,可以返回這個流。

日常開發(fā)用Spring的體系也會很便捷。

Resource體系達到了這樣的目的:對于不同的文件來源都有一種實現(xiàn)來讀取該文件,同時,擁有一個規(guī)范的接口。

現(xiàn)在我們有了Resource的設計,為了讀取對象,Spring提供了BeanDefinitionReader、ResourceLoader來從資源中提取出我們需要的資源內(nèi)容。這些類的關系如下:

  1. Resource代表一個資源對象
  2. ResourceLoader將文件轉化為Resource對象
  3. DocumentLoader將Resource對象轉化為Document對象
  4. BeanDefinitionDocumentReader解析Document對象為BeanDefinitions
  5. BeanDefinitionReader抗了初始化的大梁,在new的時候會綁定一個Bean定義注冊器(DefaultListableBeanFactory實現(xiàn)了他),后面解析后會用這個注冊器注冊

這就是大致的一個邏輯,把握住這個大致的邏輯看源碼,體驗要上升不少

下面是最上方的例子啟動的大致的流程,大量的代碼在處理讀取資源的邏輯

  1. Resource代表一個資源對象
  2. Resource封裝為帶編碼格式的EncodedResource對象
  3. XmlBeanDefinitionReader構建Document對象
  4. XmlBeanDefinitionReader內(nèi)部有個DocumentLoader,讀取Resource對象轉化為Document對象
  5. ResourceLoader將文件轉化為Resource對象
  6. DocumentLoader將Resource對象轉化為Document對象
  7. Document對象轉為Element對象
  8. DocumentReader讀取Element對象,將信息存儲在BeanDefinitionParserDelegate
  9. DocumentReader解析BeanDefinitionParserDelegate為BeanDefinitionHolder
  10. BeanDefinitionHolder獲取BeanDefinitions,交給register進行注冊(加鎖、放map)。
  11. 返回注冊的數(shù)量

這里就是初始化的結果了

總結

到此這篇關于一個簡單的Spring容器初始化流程的文章就介紹到這了,更多相關Spring容器初始化流程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MyBatis的CRUD中的不同參數(shù)綁定查詢實現(xiàn)

    MyBatis的CRUD中的不同參數(shù)綁定查詢實現(xiàn)

    本文主要介紹了MyBatis的CRUD中的不同參數(shù)綁定查詢實現(xiàn),主要包括單個參數(shù)傳遞綁定,序號參數(shù)傳遞綁定,注解參數(shù)傳遞綁定,pojo(對象)參數(shù)傳遞綁定,map參數(shù)傳遞綁定這幾種類型,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Spring中如何操作JDBC的實現(xiàn)

    Spring中如何操作JDBC的實現(xiàn)

    這篇文章主要介紹了Spring中如何操作JDBC的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • SpringBoot批處理的實現(xiàn)示例

    SpringBoot批處理的實現(xiàn)示例

    SpringBatch是一個開源 的、全面的、輕量級的批處理框架,通過SpringBoot可以實現(xiàn)強大的批處理應用程序開發(fā),本文主要介紹了SpringBoot批處理的實現(xiàn)示例,感興趣的可以了解一下
    2022-03-03
  • 如何利用泛型封裝通用的service層

    如何利用泛型封裝通用的service層

    這篇文章主要介紹了如何利用泛型封裝通用的service層,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • IDEA @SpringBootApplication報錯原因及解決

    IDEA @SpringBootApplication報錯原因及解決

    這篇文章主要介紹了IDEA @SpringBootApplication報錯原因及解決方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • springboot讀取resources下文件的方式詳解

    springboot讀取resources下文件的方式詳解

    最近寫讀取模板文件做一些后續(xù)的處理,將文件放在了項目的resources下,發(fā)現(xiàn)了一個好用的讀取方法,下面這篇文章主要給大家介紹了關于springboot讀取resources下文件的相關資料,需要的朋友可以參考下
    2022-06-06
  • Java數(shù)據(jù)結構之Map與Set專篇講解

    Java數(shù)據(jù)結構之Map與Set專篇講解

    這篇文章通過實例面試題目來講解Java中Map和Set之間的關系,具有很好的參考價值,Map與Set在面試中經(jīng)常會遇到。一起跟隨小編過來看看吧
    2022-01-01
  • 學習Java之IO流中有哪些復雜的API

    學習Java之IO流中有哪些復雜的API

    這篇文章我們要先對IO流的API有個基本的認知,因為IO流的類和方法太多了,我們不得不專門學習一下,所以本文就給大家詳細的講講Java?IO流中復雜的API,需要的朋友可以參考下
    2023-09-09
  • Java中四種遍歷List的方法總結(推薦)

    Java中四種遍歷List的方法總結(推薦)

    下面小編就為大家?guī)硪黄狫ava中四種遍歷List的方法總結(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 詳解json string轉換為java bean及實例代碼

    詳解json string轉換為java bean及實例代碼

    這篇文章主要介紹了詳解json string轉換為java bean及實例代碼的相關資料,這里提供實例代碼幫助大家理解,需要的朋友可以參考下
    2017-07-07

最新評論

襄樊市| 丹寨县| 娄底市| 阿拉尔市| 宣化县| 都江堰市| 吴堡县| 遂溪县| 织金县| 股票| 工布江达县| 周口市| 道真| 交城县| 绿春县| 颍上县| 嘉祥县| 宁晋县| 孝感市| 精河县| 通化市| 罗田县| 天全县| 牟定县| 济宁市| 大兴区| 霍城县| 灯塔市| 颍上县| 分宜县| 铁岭市| 张北县| 南华县| 乌恰县| 华坪县| 鹤峰县| 那坡县| 大同县| 工布江达县| 本溪市| 北碚区|