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

Spring?IOC容器啟動(dòng)示例分析

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

一、簡(jiǎn)介

Spring核心有兩個(gè):

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

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

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

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

二、IOC整體流程

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

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

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

如上代碼就可以利用XML配置文件來啟動(dòng)一個(gè) 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)造方法中,我們可以看到有一個(gè)refresh()方法,它是整個(gè)IOC容器的核心。

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

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)

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

7、initMessageSource()

初始化MessageSource,國(guó)際化處理。

8、initApplicationEventMulticaster()

初始化事件多播器。

9、onRefresh()

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

10、registerListeners()

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

11、finishBeanFactoryInitialization(beanFactory)

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

12、finishRefresh()

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

    在開發(fā)過程中,會(huì)遇到很多的實(shí)體需要將查出的數(shù)據(jù)處理為下拉或者級(jí)聯(lián)下拉的結(jié)構(gòu),提供給前端進(jìn)行展示。本文為大家介紹了java封裝下拉和級(jí)聯(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類的用法,本文通過一些簡(jiǎn)單的示例進(jìn)行了簡(jiǎn)單介紹,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-05-05
  • Java編程簡(jiǎn)單應(yīng)用

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

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

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

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

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

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

    SpringBoot http請(qǐng)求注解@RestController原理解析

    這篇文章主要介紹了SpringBoot http請(qǐng)求注解@RestController原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    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í)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評(píng)論

昌邑市| 曲靖市| 全椒县| 奉贤区| 息烽县| 苗栗市| 岚皋县| 鄂托克前旗| 隆子县| 平定县| 微博| 维西| 信宜市| 鄱阳县| 江西省| 合阳县| 张家界市| 阳新县| 泗阳县| 福海县| 五指山市| 双辽市| 岚皋县| 津南区| 汉源县| 沅陵县| 米脂县| 十堰市| 龙南县| 木里| 遂溪县| 南汇区| 竹北市| 常州市| 建宁县| 宝山区| 延川县| 潜江市| 平果县| 石台县| 若尔盖县|