溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Spring IOC有哪些知識點

發(fā)布時間:2021-12-08 09:48:32 來源:億速云 閱讀:119 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“Spring IOC有哪些知識點”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Spring IOC有哪些知識點”吧!

AbstractApplicationContextrefresh()方法是spring的核心,在其中完成了容器的初始化。我們先簡單看下業(yè)務(wù)Bean的聲明流程:
Spring IOC有哪些知識點
業(yè)務(wù)Bean的流程只是refresh函數(shù)中關(guān)于業(yè)務(wù)Bean創(chuàng)建的一個item,不過大致流程都是類似的。

IOC 大致流程

spring容器的入口refresh()

  1. prepareRefresh():刷新前的預(yù)處理

  1. initPropertySources():初始化一些屬性設(shè)置;子類自定義個性化的屬性設(shè)置方法

  2. getEnvironment().validateRequiredProperties():檢驗屬性的合法性等

  3. this.earlyApplicationEvents = new LinkedHashSet<>();保存容器中的一些早期的事件

  1. obtainFreshBeanFactory()

獲取beanFactory實例

  1. refreshBeanFactory();刷新或創(chuàng)建beanFactory

  2. getBeanFactory():將剛生成的beanFactory返回

  1. prepareBeanFactory(beanFactory):

beanFactory預(yù)準(zhǔn)備工作,(以上創(chuàng)建的beanFactory好多屬性沒有值,只有一些默認(rèn)的值)

  1. beanFactory.setBeanClassLoader(getClassLoader());設(shè)置BeanFactory的類加載器

  2. beanFactory.setBeanExpressionResolver:支持相關(guān)的表達式語言的解析

  3. ignoreDependencyInterface:設(shè)置忽略的自動裝配接口 EnvironmentAware EmbeddedValueResolverAware

    1. beanFactory.registerResolvableDependency:注冊可以解析的自動裝配:我們能直接在任何組件中自動注入 BeanFactory ApplicationContext

  4. beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(this));添加監(jiān)聽檢測的處理器

    1. if (!beanFactory.containsLocalBean(ENVIRONMENT_BEAN_NAME)):注冊環(huán)境變量相關(guān)bean

  1. postProcessBeanFactory(beanFactory)

子類通過重寫這個方法來實現(xiàn)自己的業(yè)務(wù)邏輯。

PS: 通過上面準(zhǔn)備BeanFactory的創(chuàng)建跟準(zhǔn)備完成
5. invokeBeanFactoryPostProcessors(beanFactory)

執(zhí)行BeanFactoryPostProcessor的后置處理器。是在2 跟3 滯后執(zhí)行的。這里有兩個接口需要實現(xiàn) BeanFactoryPostProcessorBeanDefinitionRegistryPostProcessor。

  1. registerBeanPostProcessors(beanFactory)

實例化和注冊beanFactory中擴展了BeanPostProcessorbean。功能就是攔截我們業(yè)務(wù)Bean創(chuàng)建通過注解動態(tài)代理的方式進行增強,,可參考 AOP 流程,

  1. initMessageSource()

標(biāo)簽國際化資源,初始化MessageSource(國際化功能:消息解析,消息綁定)

  1. initApplicationEventMulticaster()

初始化事件派發(fā)器,

  1. onRefresh()

用來留給子類重寫的方法,當(dāng)容器刷新的時候可以自定義邏輯。

  1. registerListeners()

給容器中將所有項目的ApplicationListener 注冊進來。

  1. finishBeanFactoryInitialization(beanFactory)

將項目中所以非懶加載的單實例Bean進行初始化加載,具體在 AOP 流程也跟過了。

  1. finishRefresh()

refresh做完之后需要做的其他事情。清除上下文資源緩存(如掃描中的ASM元數(shù)據(jù))
初始化上下文的生命周期處理器,并刷新(找出Spring容器中實現(xiàn)了Lifecycle接口的bean并執(zhí)行start()方法)。發(fā)布ContextRefreshedEvent事件告知對應(yīng)的ApplicationListener進行響應(yīng)的操作

大致流程: 刷新下做一些預(yù)處理工作,BeanFactory實例化,BeanFactory若干參數(shù)賦值,BeanFactory的后置處理器,一些注解Bean的注冊操作,國際化,事件發(fā)布機制,監(jiān)聽機制,業(yè)務(wù)Bean的創(chuàng)建。 涉及到單例模式,工程模式,適配器模式,以及動態(tài)代理等等。

IOC核心流程圖

圖片較大如看不清,可公眾號【SoWhat1412】回復(fù)AOP獲得高清圖片
Spring IOC有哪些知識點

到此,相信大家對“Spring IOC有哪些知識點”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI