您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Spring IOC有哪些知識點”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Spring IOC有哪些知識點”吧!
AbstractApplicationContext
的refresh()
方法是spring的核心,在其中完成了容器的初始化。我們先簡單看下業(yè)務(wù)Bean的聲明流程:
業(yè)務(wù)Bean的流程只是refresh
函數(shù)中關(guān)于業(yè)務(wù)Bean創(chuàng)建的一個item,不過大致流程都是類似的。
spring容器的入口refresh()
prepareRefresh():刷新前的預(yù)處理
initPropertySources():初始化一些屬性設(shè)置;子類自定義個性化的屬性設(shè)置方法
getEnvironment().validateRequiredProperties():檢驗屬性的合法性等
this.earlyApplicationEvents = new LinkedHashSet<>();保存容器中的一些早期的事件
obtainFreshBeanFactory()
獲取beanFactory實例
refreshBeanFactory();刷新或創(chuàng)建beanFactory
getBeanFactory():將剛生成的beanFactory返回
prepareBeanFactory(beanFactory):
beanFactory預(yù)準(zhǔn)備工作,(以上創(chuàng)建的beanFactory好多屬性沒有值,只有一些默認(rèn)的值)
beanFactory.setBeanClassLoader(getClassLoader());設(shè)置BeanFactory的類加載器
beanFactory.setBeanExpressionResolver:支持相關(guān)的表達式語言的解析
ignoreDependencyInterface:設(shè)置忽略的自動裝配接口 EnvironmentAware EmbeddedValueResolverAware
beanFactory.registerResolvableDependency:注冊可以解析的自動裝配:我們能直接在任何組件中自動注入 BeanFactory ApplicationContext
beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(this));添加監(jiān)聽檢測的處理器
if (!beanFactory.containsLocalBean(ENVIRONMENT_BEAN_NAME)):注冊環(huán)境變量相關(guān)bean
postProcessBeanFactory(beanFactory)
子類通過重寫這個方法來實現(xiàn)自己的業(yè)務(wù)邏輯。
PS
: 通過上面準(zhǔn)備BeanFactory的創(chuàng)建跟準(zhǔn)備完成
5. invokeBeanFactoryPostProcessors(beanFactory)
執(zhí)行BeanFactoryPostProcessor的
后置
處理器。是在2 跟3 滯后執(zhí)行的。這里有兩個接口需要實現(xiàn)BeanFactoryPostProcessor
跟BeanDefinitionRegistryPostProcessor
。
registerBeanPostProcessors(beanFactory)
實例化和注冊
beanFactory
中擴展了BeanPostProcessor
的bean
。功能就是攔截我們業(yè)務(wù)Bean創(chuàng)建通過注解動態(tài)代理的方式進行增強,,可參考 AOP 流程,
initMessageSource()
標(biāo)簽國際化資源,初始化MessageSource(國際化功能:消息解析,消息綁定)
initApplicationEventMulticaster()
初始化事件派發(fā)器,
onRefresh()
用來留給子類重寫的方法,當(dāng)容器刷新的時候可以自定義邏輯。
registerListeners()
給容器中將所有項目的ApplicationListener 注冊進來。
finishBeanFactoryInitialization(beanFactory)
將項目中所以非懶加載的單實例Bean進行初始化加載,具體在 AOP 流程也跟過了。
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)代理等等。
圖片較大如看不清,可公眾號【SoWhat1412】回復(fù)AOP獲得高清圖片
到此,相信大家對“Spring IOC有哪些知識點”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(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)容。