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

Spring?IOC容器啟動示例分析

 更新時間:2023年02月14日 11:22:22   作者:每天都要進(jìn)步一點(diǎn)點(diǎn)  
這篇文章主要給大家介紹了Spring?IOC基于注解啟動的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

一、簡介

Spring核心有兩個:

  • IOC:控制反轉(zhuǎn)
  • AOP:面向切面編程

相信大家在項(xiàng)目中都使用過Spring進(jìn)行開發(fā),都知道Spring非常強(qiáng)大,那么在熟練掌握Spring進(jìn)行開發(fā)后,我們有必要去了解一下其中的原理,Spring工作原理也是面試中必問的一個環(huán)節(jié),先來看看幾道常見的面試題,想想看,如果被面試官問到,你會怎么答?

  • Spring IOC的工作原理?
  • Spring Bean的生命周期是怎樣的?
  • Spring 中使用到了哪些設(shè)計模式?
  • Spring是如何解決循環(huán)依賴的?
  • BeanFactory和FactoryBean的區(qū)別是什么?
  • ....

顯然,我們需要從源碼中獲取我們想要的答案,本篇文章我們先來分析一下Spring中IOC容器整個初始化過程,本篇文章暫且先不詳細(xì)分析源碼實(shí)現(xiàn),先把整個流程理清,后面再針對其中一些重要的環(huán)節(jié)逐個分析源碼是如何實(shí)現(xiàn)的,這樣可能沒那么懵,不然一進(jìn)來就直接一個一個細(xì)節(jié)去摳,可能跟著跟著不知道從哪個方法進(jìn)來的了。

二、IOC整體流程

Spring IOC的核心工廠類其實(shí)就是BeanFactory,從名字上也很好理解,生產(chǎn) bean 的工廠,它負(fù)責(zé)生產(chǎn)和管理各個 bean 實(shí)例。在項(xiàng)目中我們更多的是使用它的子類或者實(shí)現(xiàn)類,像常見的AbstractApplicationContext、ApplicationContext、DefaultListableBeanFactory、ClassPathXmlApplicationContext、AnnotationConfigApplicationContext等等。

我們先來回顧一下最基本的啟動 Spring 容器的例子:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring-config.xml");
System.out.println(applicationContext.getBean("student"));

如上代碼就可以利用XML配置文件來啟動一個 Spring 容器。

public ClassPathXmlApplicationContext(
			String[] configLocations, boolean refresh, @Nullable ApplicationContext parent)
			throws BeansException {
		super(parent);
		// 1、設(shè)置配置文件的路徑
		setConfigLocations(configLocations);
		if (refresh) {
			//2、容器刷新方法:IOC核心方法就是refresh()
			refresh();
		}
	}

在ClassPathXmlApplicationContext的構(gòu)造方法中,我們可以看到有一個refresh()方法,它是整個IOC容器的核心。

refresh()主要做了下述12件事情,先說個大概:

1、prepareRefresh()

容器刷新前的一些預(yù)處理工作。

2、obtainFreshBeanFactory()

創(chuàng)建DefaultListableBeanFactory工廠,給bean工廠設(shè)置一些屬性,加載配置文件信息,封裝成bean定義信息。

3、prepareBeanFactory(beanFactory)

同樣,設(shè)置bean工廠的一些屬性,如添加一些BeanPostProcessor增強(qiáng)器等。

4、postProcessBeanFactory(beanFactory)

模板方法,留給子類擴(kuò)展實(shí)現(xiàn)。

5、invokeBeanFactoryPostProcessors(beanFactory)

執(zhí)行BeanFactoryPostProcessor的postProcessBeanFactory ()增強(qiáng)方法。

6、registerBeanPostProcessors(beanFactory)

注冊BeanPostProcessor增強(qiáng)器,注意這里只是注冊,真正是在初始化階段的前后執(zhí)行。

7、initMessageSource()

初始化MessageSource,國際化處理。

8、initApplicationEventMulticaster()

初始化事件多播器。

9、onRefresh()

模板方法,留給子類擴(kuò)展實(shí)現(xiàn)。

10、registerListeners()

注冊一些監(jiān)聽器。

11、finishBeanFactoryInitialization(beanFactory)

IOC容器創(chuàng)建最重要的一個步驟:完成非懶加載的單例bean對象的實(shí)例化,包括反射創(chuàng)建bean對象、屬性填充、循環(huán)依賴的處理、bean的初始化等等。

12、finishRefresh()

容器刷新完成之后的一些處理工作。

前面我們通過文字描述了refresh()方法主要的處理流程,下面通過兩張圖來說明,會更加形象,好理解一點(diǎn):

這里可能稍微就涉及到一些細(xì)節(jié)了,有些許復(fù)雜,大家可以先過幾遍,有個印象后自己再去看源碼,相信會更加清晰里面的處理邏輯。

到此這篇關(guān)于Spring IOC容器啟動示例分析的文章就介紹到這了,更多相關(guān)Spring IOC容器啟動內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java?循環(huán)隊列/環(huán)形隊列的實(shí)現(xiàn)流程

    Java?循環(huán)隊列/環(huán)形隊列的實(shí)現(xiàn)流程

    循環(huán)隊列又叫環(huán)形隊列,是一種特殊的隊列。循環(huán)隊列解決了隊列出隊時需要將所有數(shù)據(jù)前移一位的問題。本文將帶大家詳細(xì)了解循環(huán)隊列如何實(shí)現(xiàn),需要的朋友可以參考一下
    2022-02-02
  • 詳解如何更改SpringBoot TomCat運(yùn)行方式

    詳解如何更改SpringBoot TomCat運(yùn)行方式

    這篇文章主要介紹了詳解如何更改SpringBoot TomCat運(yùn)行方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java實(shí)現(xiàn)級聯(lián)下拉結(jié)構(gòu)的示例代碼

    Java實(shí)現(xiàn)級聯(lián)下拉結(jié)構(gòu)的示例代碼

    在開發(fā)過程中,會遇到很多的實(shí)體需要將查出的數(shù)據(jù)處理為下拉或者級聯(lián)下拉的結(jié)構(gòu),提供給前端進(jìn)行展示。本文為大家介紹了java封裝下拉和級聯(lián)下拉的通用工具類,需要的可以參考一下
    2022-06-06
  • SpringBoot入坑筆記之spring-boot-starter-web 配置文件的使用

    SpringBoot入坑筆記之spring-boot-starter-web 配置文件的使用

    本篇向小伙伴介紹springboot配置文件的配置,已經(jīng)全局配置參數(shù)如何使用的。需要的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-01-01
  • 詳解Java中CountDownLatch的用法

    詳解Java中CountDownLatch的用法

    這篇文章主要為大家詳細(xì)介紹了Java中CountDownLatch類的用法,本文通過一些簡單的示例進(jìn)行了簡單介紹,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-05-05
  • Java編程簡單應(yīng)用

    Java編程簡單應(yīng)用

    本文主要介紹了三個簡單Java小程序———1、HelloWorld(HelloWorld的來源);2、輸出個人信息3、輸出特殊圖案。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Springboot集成mybatis實(shí)現(xiàn)多數(shù)據(jù)源配置詳解流程

    Springboot集成mybatis實(shí)現(xiàn)多數(shù)據(jù)源配置詳解流程

    在日常開發(fā)中,若遇到多個數(shù)據(jù)源的需求,怎么辦呢?通過springboot集成mybatis實(shí)現(xiàn)多數(shù)據(jù)源配置,簡單嘗試一下,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Spring零基礎(chǔ)入門WebFlux響應(yīng)式編程

    Spring零基礎(chǔ)入門WebFlux響應(yīng)式編程

    Spring 提供了兩個并行堆棧,一種是基于帶有 Spring MVC 和 Spring Data 結(jié)構(gòu)的 Servlet API,另一個是完全反應(yīng)式堆棧,它利用了 Spring WebFlux 和 Spring Data 的反應(yīng)式存儲庫,這篇文章主要介紹了Spring-webflux 響應(yīng)式編程,需要的朋友可以參考下
    2022-10-10
  • SpringBoot http請求注解@RestController原理解析

    SpringBoot http請求注解@RestController原理解析

    這篇文章主要介紹了SpringBoot http請求注解@RestController原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Java List Object[]轉(zhuǎn)換成List T的實(shí)例

    Java List Object[]轉(zhuǎn)換成List T的實(shí)例

    這篇文章主要介紹了Java List Object[]轉(zhuǎn)換成List T的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論

湖北省| 永昌县| 定南县| 榆树市| 平原县| 新邵县| 昌吉市| 高青县| 兴宁市| 同德县| 繁峙县| 永春县| 额尔古纳市| 武川县| 建阳市| 平原县| 长子县| 林口县| 拉萨市| 大埔区| 德钦县| 乌鲁木齐市| 宝应县| 榆林市| 宜君县| 云阳县| 都昌县| 阿坝县| 黎川县| 虎林市| 东乡县| 延川县| 上栗县| 虞城县| 维西| 潞西市| 睢宁县| 义马市| 松桃| 襄樊市| 驻马店市|