Spring容器刷新

org.springframework.context.support.AbstractApplicationContext.refresh()

synchronized (this.startupShutdownMonitor) {
...
1. 容器刷新前的準(zhǔn)備 prepareRefresh

2. ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory()
  創(chuàng)建DefaultListableBeanFactory募舟,若已有beanFacotry則先摧毀再創(chuàng)建;解析bean定義并放入beanFactory;

3. prepareBeanFactory(beanFactory)
  設(shè)置beanFactory具被,加入一些BeanPostprocessor和其他組件對(duì)象纬纪。

4. postProcessBeanFactory(beanFactory)
  可以添加一些BeanFactoryPostProcessor等

5. invokeBeanFactoryPostProcessors(beanFactory)
  調(diào)用 BeanFactoryPostProcessor 
BeanFactoryPostProcessor#postProcessBeanFactory(ConfigurableListableBeanFactory)
BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry(BeanDefinitionRegistry)

6. registerBeanPostProcessors(beanFactory)
  注冊(cè) BeanPostProcessor
  BeanPostProcessor#postProcessBeforeInitialization(Object bean, String beanName)
  BeanPostProcessor#postProcessAfterInitialization(Object bean, String beanName)
  InstantiationAwareBeanPostProcessor...

*****************************not important***************************************
7. initMessageSource()
   國(guó)際化蚓再,registerSingleton(DelegatingMessageSource)
8. initApplicationEventMulticaster()
   事件廣播器,registerSingleton(SimpleApplicationEventMulticaster)
9. onRefresh()
10. registerListeners()
    注冊(cè)事件監(jiān)聽(tīng)器 
*****************************not important***************************************

11. finishBeanFactoryInitialization(beanFactory)
    初始化singleton beans
12. finishRefresh()
    清除resourceCache包各,registerSingleton(DefaultLifecycleProcessor)摘仅,
    廣播容器刷新事件(ContextRefreshedEvent)
...
}

一、prepareRefresh(容器刷新前的準(zhǔn)備 )

//容器刷新前问畅,設(shè)置一些值
    this.startupDate = System.currentTimeMillis();
    this.closed.set(false);
    this.active.set(true);
    
// Initialize any placeholder property sources in the context environment
     initPropertySources();

//獲取StandardEnvironment環(huán)境娃属,執(zhí)行一些校驗(yàn)
    getEnvironment().validateRequiredProperties();
//Allow for the collection of early ApplicationEvents,to be published once the multicaster is available...
    this.earlyApplicationEvents = new LinkedHashSet<>();

二、獲取BeanFactory

使用xml配置的較老的容器护姆,在這一步會(huì)加載beanDefinition矾端。

三、prepareBeanFactory(放入一些組件到BeanFactory)

四卵皂、postProcessBeanFactory

模板方法须床,子類可以做一些拓展實(shí)現(xiàn)。

五渐裂、invokeBeanFactoryPostProcessors

初始化 BeanFactoryPostProcessor 并調(diào)用其方法豺旬。

//BeanFactoryPostProcessor
void postProcessBeanFactory(ConfigurableListableBeanFactory)
//BeanDefinitionRegistryPostProcessor
void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry)

重要的處理類
org.springframework.context.annotation.ConfigurationClassPostProcessor 負(fù)責(zé)加載BeanDefinition钠惩。

六、registerBeanPostProcessors

初始化 BeanPostProcessor 并添加到BeanFactory中族阅。

//BeanPostProcessor
Object postProcessBeforeInitialization(Object bean, String beanName)
Object postProcessAfterInitialization(Object bean, String beanName)
PropertyValues postProcessPropertyValues(
            PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName)
//InstantiationAwareBeanPostProcessor
Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName)
boolean postProcessAfterInstantiation(Object bean, String beanName)
//MergedBeanDefinitionPostProcessor
void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName)

重要的處理類
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor
org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor

七篓跛、initMessageSource

注入單實(shí)例 org.springframework.context.support.DelegatingMessageSource 實(shí)現(xiàn)國(guó)際化功能。

八坦刀、initApplicationEventMulticaster

注入單實(shí)例 org.springframework.context.event.SimpleApplicationEventMulticaster.SimpleApplicationEventMulticaster(BeanFactory) 實(shí)現(xiàn)事件傳播功能

九愧沟、onRefresh

模板方法,子類可以做一些拓展實(shí)現(xiàn)鲤遥。

十沐寺、registerListeners

注冊(cè)監(jiān)聽(tīng)器,

十一盖奈、finishBeanFactoryInitialization?

實(shí)例化所有的 non-lazy-init的BeanDefinition混坞,容器刷新中最核心的方法。
詳細(xì)內(nèi)容

十二钢坦、finishRefresh

清空一些緩存資源究孕、執(zhí)行一些LifecycleProcessor、發(fā)布一些事件等

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末爹凹,一起剝皮案震驚了整個(gè)濱河市厨诸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌禾酱,老刑警劉巖微酬,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異颤陶,居然都是意外死亡颗管,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)指郁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)忙上,“玉大人拷呆,你說(shuō)我怎么就攤上這事闲坎。” “怎么了茬斧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵腰懂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我项秉,道長(zhǎng)绣溜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任娄蔼,我火速辦了婚禮怖喻,結(jié)果婚禮上底哗,老公的妹妹穿的比我還像新娘。我一直安慰自己锚沸,他們只是感情好跋选,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著哗蜈,像睡著了一般前标。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上距潘,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天炼列,我揣著相機(jī)與錄音,去河邊找鬼音比。 笑死俭尖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的硅确。 我是一名探鬼主播目溉,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼菱农!你這毒婦竟也來(lái)了缭付?” 一聲冷哼從身側(cè)響起辰斋,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤滤否,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后瑰步,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體的妖,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绣檬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嫂粟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娇未。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖星虹,靈堂內(nèi)的尸體忽然破棺而出零抬,到底是詐尸還是另有隱情,我是刑警寧澤宽涌,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布平夜,位于F島的核電站,受9級(jí)特大地震影響卸亮,放射性物質(zhì)發(fā)生泄漏忽妒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望段直。 院中可真熱鬧吃溅,春花似錦、人聲如沸鸯檬。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)京闰。三九已至颜及,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蹂楣,已是汗流浹背俏站。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痊土,地道東北人肄扎。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像赁酝,于是被迫代替她去往敵國(guó)和親犯祠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容