<strike id="ca4is"><em id="ca4is"></em></strike>
  • <sup id="ca4is"></sup>
    • <s id="ca4is"><em id="ca4is"></em></s>
      <option id="ca4is"><cite id="ca4is"></cite></option>
    • 二維碼
      企資網(wǎng)

      掃一掃關(guān)注

      當(dāng)前位置: 首頁(yè) » 企業(yè)資訊 » 咨詢(xún) » 正文

      refresh是什么?Spring_refre

      放大字體  縮小字體 發(fā)布日期:2022-02-15 12:00:39    作者:葉展文    瀏覽次數(shù):64
      導(dǎo)讀

      refresh 是 AbstractApplicationContext 中得一個(gè)方法,負(fù)責(zé)初始化 ApplicationContext 容器,容器必須調(diào)用 refresh 才能正常工作。它得內(nèi)部主要會(huì)調(diào)用 12 個(gè)方法,我們把它們稱(chēng)為 refresh 得 12 個(gè)步驟:1. prepare

      refresh 是 AbstractApplicationContext 中得一個(gè)方法,負(fù)責(zé)初始化 ApplicationContext 容器,容器必須調(diào)用 refresh 才能正常工作。它得內(nèi)部主要會(huì)調(diào)用 12 個(gè)方法,我們把它們稱(chēng)為 refresh 得 12 個(gè)步驟:

      1. prepareRefresh

      2. obtainFreshBeanFactory

      3. prepareBeanFactory

      4. postProcessBeanFactory

      5. invokeBeanFactoryPostProcessors

      6. registerBeanPostProcessors

      7. initMessageSource

      8. initApplicationEventMulticaster

      9. onRefresh

      10. registerListeners

      11. finishBeanFactoryInitialization

      12. finishRefresh

      功能分類(lèi)

      1 為準(zhǔn)備環(huán)境

      2 3 4 5 6 為準(zhǔn)備 BeanFactory

      7 8 9 10 12 為準(zhǔn)備 ApplicationContext

      11 為初始化 BeanFactory 中非延遲單例 bean

      具體步驟1. prepareRefresh

      * 這一步創(chuàng)建和準(zhǔn)備了 Environment 對(duì)象,它作為 ApplicationContext 得一個(gè)成員變量

      * Environment 對(duì)象得作用之一是為后續(xù) 等Value,值注入時(shí)提供鍵值

      * Environment 分成三個(gè)主要部分

      * systemProperties - 保存 java 環(huán)境鍵值

      * systemEnvironment - 保存系統(tǒng)環(huán)境鍵值

      * 自定義 PropertySource - 保存自定義鍵值,例如來(lái)自于 *.properties 文件得鍵值

      2. obtainFreshBeanFactory

      * 這一步獲取(或創(chuàng)建) BeanFactory,它也是作為 ApplicationContext 得一個(gè)成員變量

      * BeanFactory 得作用是負(fù)責(zé) bean 得創(chuàng)建、依賴(lài)注入和初始化,bean 得各項(xiàng)特征由 BeanDefinition 定義

      * BeanDefinition 作為 bean 得設(shè)計(jì)藍(lán)圖,規(guī)定了 bean 得特征,如單例多例、依賴(lài)關(guān)系、初始銷(xiāo)毀方法等

      * BeanDefinition 得有多種多樣,可以是通過(guò) xml 獲得、配置類(lèi)獲得、組件掃描獲得,也可以是編程添加

      * 所有得 BeanDefinition 會(huì)存入 BeanFactory 中得 beanDefinitionMap 集合

      3. prepareBeanFactory

      * 這一步會(huì)進(jìn)一步完善 BeanFactory,為它得各項(xiàng)成員變量賦值

      * beanexpressionResolver 用來(lái)解析 SpEL,常見(jiàn)實(shí)現(xiàn)為 StandardBeanexpressionResolver

      * propertyEditorRegistrars 會(huì)注冊(cè)類(lèi)型轉(zhuǎn)換器

      * 它在這里使用了 ResourceEditorRegistrar 實(shí)現(xiàn)類(lèi)

      * 并應(yīng)用 ApplicationContext 提供得 Environment 完成 ${ } 解析

      * registerResolvableDependency 來(lái)注冊(cè) beanFactory 以及 ApplicationContext,讓它們也能用于依賴(lài)注入

      * beanPostProcessors 是 bean 后處理器集合,會(huì)工作在 bean 得生命周期各個(gè)階段,此處會(huì)添加兩個(gè):

      * ApplicationContextAwareProcessor 用來(lái)解析 Aware 接口

      * ApplicationListenerDetector 用來(lái)識(shí)別容器中 ApplicationListener 類(lèi)型得 bean

      4. postProcessBeanFactory

      * 這一步是空實(shí)現(xiàn),留給子類(lèi)擴(kuò)展。

      * 一般 Web 環(huán)境得 ApplicationContext 都要利用它注冊(cè)新得 Scope,完善 Web 下得 BeanFactory

      * 這里體現(xiàn)得是模板方法設(shè)計(jì)模式

      5. invokeBeanFactoryPost Processors

      * 這一步會(huì)調(diào)用 beanFactory 后處理器

      * beanFactory 后處理器,充當(dāng) beanFactory 得擴(kuò)展點(diǎn),可以用來(lái)補(bǔ)充或修改 BeanDefinition

      * 常見(jiàn)得 beanFactory 后處理器有

      * ConfigurationClassPostProcessor – 解析 等Configuration、等Bean、等import、等PropertySource 等

      * PropertySourcesPlaceHolderConfigurer – 替換 BeanDefinition 中得 ${ }

      * MapperScannerConfigurer – 補(bǔ)充 Mapper 接口對(duì)應(yīng)得 BeanDefinition

      6. registerBeanPost Processors

      * 這一步是繼續(xù)從 beanFactory 中找出 bean 后處理器,添加至 beanPostProcessors 集合中

      * bean 后處理器,充當(dāng) bean 得擴(kuò)展點(diǎn),可以工作在 bean 得實(shí)例化、依賴(lài)注入、初始化階段,常見(jiàn)得有:

      * AutowiredAnnotationBeanPostProcessor 功能有:解析 等Autowired,等Value 注解

      * CommonAnnotationBeanPostProcessor 功能有:解析 等Resource,等PostConstruct,等PreDestroy

      * AnnotationAwareAspectJAutoProxyCreator 功能有:為符合切點(diǎn)得目標(biāo) bean 自動(dòng)創(chuàng)建代理

      7. initMessageSource

      * 這一步是為 ApplicationContext 添加 messageSource 成員,實(shí)現(xiàn)國(guó)際化功能

      * 去 beanFactory 內(nèi)找名為 messageSource 得 bean,如果沒(méi)有,則提供空得 MessageSource 實(shí)現(xiàn)

      8. initApplication ContextEventMulticaster

      * 這一步為 ApplicationContext 添加事件廣播器成員,即 applicationContextEventMulticaster

      * 它得作用是發(fā)布事件給監(jiān)聽(tīng)器

      * 去 beanFactory 找名為 applicationEventMulticaster 得 bean 作為事件廣播器,若沒(méi)有,會(huì)創(chuàng)建默認(rèn)得事件廣播器

      * 之后就可以調(diào)用 ApplicationContext.publishEvent(事件對(duì)象) 來(lái)發(fā)布事件

      9. onRefresh

      * 這一步是空實(shí)現(xiàn),留給子類(lèi)擴(kuò)展

      * SpringBoot 中得子類(lèi)在這里準(zhǔn)備了 WebServer,即內(nèi)嵌 web 容器

      * 體現(xiàn)得是模板方法設(shè)計(jì)模式

      10. registerListeners

      * 這一步會(huì)從多種途徑找到事件監(jiān)聽(tīng)器,并添加至 applicationEventMulticaster

      * 事件監(jiān)聽(tīng)器顧名思義,用來(lái)接收事件廣播器發(fā)布得事件,有如下

      * 事先編程添加得

      * 來(lái)自容器中得 bean

      * 來(lái)自于 等EventListener 得解析

      * 要實(shí)現(xiàn)事件監(jiān)聽(tīng)器,只需要實(shí)現(xiàn) ApplicationListener 接口,重寫(xiě)其中 onApplicationEvent(E e) 方法即可

      11. finishBeanFactory Initialization

      * 這一步會(huì)將 beanFactory 得成員補(bǔ)充完畢,并初始化所有非延遲單例 bean

      * conversionService 也是一套轉(zhuǎn)換機(jī)制,作為對(duì) PropertyEditor 得補(bǔ)充

      * embeddedValueResolvers 即內(nèi)嵌值解析器,用來(lái)解析 等Value 中得 ${ },借用得是 Environment 得功能

      * singletonObjects 即單例池,緩存所有單例對(duì)象

      * 對(duì)象得創(chuàng)建都分三個(gè)階段,每一階段都有不同得 bean 后處理器參與進(jìn)來(lái),擴(kuò)展功能

      12. finishRefresh

      * 這一步會(huì)為 ApplicationContext 添加 lifecycleProcessor 成員,用來(lái)控制容器內(nèi)需要生命周期管理得 bean

      * 如果容器中有名稱(chēng)為 lifecycleProcessor 得 bean 就用它,否則創(chuàng)建默認(rèn)得生命周期管理器

      * 準(zhǔn)備好生命周期管理器,就可以實(shí)現(xiàn)

      * 調(diào)用 context 得 start,即可觸發(fā)所有實(shí)現(xiàn) LifeCycle 接口 bean 得 start

      * 調(diào)用 context 得 stop,即可觸發(fā)所有實(shí)現(xiàn) LifeCycle 接口 bean 得 stop

      * 發(fā)布 ContextRefreshed 事件,整個(gè) refresh 執(zhí)行完成

       
      (文/葉展文)
      免責(zé)聲明
      本文僅代表作發(fā)布者:葉展文個(gè)人觀(guān)點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問(wèn)題,請(qǐng)及時(shí)聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
       

      Copyright ? 2016 - 2025 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號(hào)

      粵ICP備16078936號(hào)

      微信

      關(guān)注
      微信

      微信二維碼

      WAP二維碼

      客服

      聯(lián)系
      客服

      聯(lián)系客服:

      在線(xiàn)QQ: 303377504

      客服電話(huà): 020-82301567

      E_mail郵箱: weilaitui@qq.com

      微信公眾號(hào): weishitui

      客服001 客服002 客服003

      工作時(shí)間:

      周一至周五: 09:00 - 18:00

      午夜久久久久久网站,99久久www免费,欧美日本日韩aⅴ在线视频,东京干手机福利视频
        <strike id="ca4is"><em id="ca4is"></em></strike>
      • <sup id="ca4is"></sup>
        • <s id="ca4is"><em id="ca4is"></em></s>
          <option id="ca4is"><cite id="ca4is"></cite></option>
        • 主站蜘蛛池模板: 国产人与禽zoz0性伦| 性一交一乱一伦一色一情| 成年免费视频黄网站在线观看 | 女子校生下媚药在线观看| 国产成人AV免费观看| 亚洲精品国产精品国自产观看 | 69堂在线观看| 第一福利在线观看| 巨大破瓜肉h强| 免费在线黄色网址| 中文字幕综合网| 欧美亚洲另类视频| 最近在线中文字幕影院网| 国语自产偷拍精品视频偷| 四虎AV永久在线精品免费观看 | 白白色免费在线视频| 日本久久综合久久综合| 国产一区二区三区在线观看免费| 亚洲中文字幕久久精品无码va| free性满足hd极品| 污污免费在线观看| 嫩小xxxxx性bbbbb孕妇| 四虎在线视频免费观看| 一求乳魂h肉动漫在线观看| 色丁香在线视频| 日本毛茸茸的丰满熟妇| 国产99久久精品一区二区| 久久天天躁狠狠躁夜夜呲| 色噜噜成人综合网站| 怡红院怡春院首页| 亚洲综合在线观看视频| loosiesaki| 男人桶爽女人30分钟视频动态图 | 男人的天堂久久| 国内剧果冻传媒在线观看网站| 伊人久久大香线蕉综合AV| 一求乳魂h肉动漫在线观看| 狠狠色丁香久久婷婷综合五月 | 国产亚洲精品精品国产亚洲综合 | 日本一本在线播放| 再深点灬舒服灬太大了添动视频 |