<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>
    • 二維碼
      企資網

      掃一掃關注

      當前位置: 首頁 » 企業資訊 » 咨詢 » 正文

      refresh是什么?Spring_refre

      放大字體  縮小字體 發布日期:2022-02-15 12:00:39    作者:葉展文    瀏覽次數:72
      導讀

      refresh 是 AbstractApplicationContext 中得一個方法,負責初始化 ApplicationContext 容器,容器必須調用 refresh 才能正常工作。它得內部主要會調用 12 個方法,我們把它們稱為 refresh 得 12 個步驟:1. prepare

      refresh 是 AbstractApplicationContext 中得一個方法,負責初始化 ApplicationContext 容器,容器必須調用 refresh 才能正常工作。它得內部主要會調用 12 個方法,我們把它們稱為 refresh 得 12 個步驟:

      1. prepareRefresh

      2. obtainFreshBeanFactory

      3. prepareBeanFactory

      4. postProcessBeanFactory

      5. invokeBeanFactoryPostProcessors

      6. registerBeanPostProcessors

      7. initMessageSource

      8. initApplicationEventMulticaster

      9. onRefresh

      10. registerListeners

      11. finishBeanFactoryInitialization

      12. finishRefresh

      功能分類

      1 為準備環境

      2 3 4 5 6 為準備 BeanFactory

      7 8 9 10 12 為準備 ApplicationContext

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

      具體步驟1. prepareRefresh

      * 這一步創建和準備了 Environment 對象,它作為 ApplicationContext 得一個成員變量

      * Environment 對象得作用之一是為后續 等Value,值注入時提供鍵值

      * Environment 分成三個主要部分

      * systemProperties - 保存 java 環境鍵值

      * systemEnvironment - 保存系統環境鍵值

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

      2. obtainFreshBeanFactory

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

      * BeanFactory 得作用是負責 bean 得創建、依賴注入和初始化,bean 得各項特征由 BeanDefinition 定義

      * BeanDefinition 作為 bean 得設計藍圖,規定了 bean 得特征,如單例多例、依賴關系、初始銷毀方法等

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

      * 所有得 BeanDefinition 會存入 BeanFactory 中得 beanDefinitionMap 集合

      3. prepareBeanFactory

      * 這一步會進一步完善 BeanFactory,為它得各項成員變量賦值

      * beanexpressionResolver 用來解析 SpEL,常見實現為 StandardBeanexpressionResolver

      * propertyEditorRegistrars 會注冊類型轉換器

      * 它在這里使用了 ResourceEditorRegistrar 實現類

      * 并應用 ApplicationContext 提供得 Environment 完成 ${ } 解析

      * registerResolvableDependency 來注冊 beanFactory 以及 ApplicationContext,讓它們也能用于依賴注入

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

      * ApplicationContextAwareProcessor 用來解析 Aware 接口

      * ApplicationListenerDetector 用來識別容器中 ApplicationListener 類型得 bean

      4. postProcessBeanFactory

      * 這一步是空實現,留給子類擴展。

      * 一般 Web 環境得 ApplicationContext 都要利用它注冊新得 Scope,完善 Web 下得 BeanFactory

      * 這里體現得是模板方法設計模式

      5. invokeBeanFactoryPost Processors

      * 這一步會調用 beanFactory 后處理器

      * beanFactory 后處理器,充當 beanFactory 得擴展點,可以用來補充或修改 BeanDefinition

      * 常見得 beanFactory 后處理器有

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

      * PropertySourcesPlaceHolderConfigurer – 替換 BeanDefinition 中得 ${ }

      * MapperScannerConfigurer – 補充 Mapper 接口對應得 BeanDefinition

      6. registerBeanPost Processors

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

      * bean 后處理器,充當 bean 得擴展點,可以工作在 bean 得實例化、依賴注入、初始化階段,常見得有:

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

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

      * AnnotationAwareAspectJAutoProxyCreator 功能有:為符合切點得目標 bean 自動創建代理

      7. initMessageSource

      * 這一步是為 ApplicationContext 添加 messageSource 成員,實現國際化功能

      * 去 beanFactory 內找名為 messageSource 得 bean,如果沒有,則提供空得 MessageSource 實現

      8. initApplication ContextEventMulticaster

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

      * 它得作用是發布事件給監聽器

      * 去 beanFactory 找名為 applicationEventMulticaster 得 bean 作為事件廣播器,若沒有,會創建默認得事件廣播器

      * 之后就可以調用 ApplicationContext.publishEvent(事件對象) 來發布事件

      9. onRefresh

      * 這一步是空實現,留給子類擴展

      * SpringBoot 中得子類在這里準備了 WebServer,即內嵌 web 容器

      * 體現得是模板方法設計模式

      10. registerListeners

      * 這一步會從多種途徑找到事件監聽器,并添加至 applicationEventMulticaster

      * 事件監聽器顧名思義,用來接收事件廣播器發布得事件,有如下

      * 事先編程添加得

      * 來自容器中得 bean

      * 來自于 等EventListener 得解析

      * 要實現事件監聽器,只需要實現 ApplicationListener 接口,重寫其中 onApplicationEvent(E e) 方法即可

      11. finishBeanFactory Initialization

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

      * conversionService 也是一套轉換機制,作為對 PropertyEditor 得補充

      * embeddedValueResolvers 即內嵌值解析器,用來解析 等Value 中得 ${ },借用得是 Environment 得功能

      * singletonObjects 即單例池,緩存所有單例對象

      * 對象得創建都分三個階段,每一階段都有不同得 bean 后處理器參與進來,擴展功能

      12. finishRefresh

      * 這一步會為 ApplicationContext 添加 lifecycleProcessor 成員,用來控制容器內需要生命周期管理得 bean

      * 如果容器中有名稱為 lifecycleProcessor 得 bean 就用它,否則創建默認得生命周期管理器

      * 準備好生命周期管理器,就可以實現

      * 調用 context 得 start,即可觸發所有實現 LifeCycle 接口 bean 得 start

      * 調用 context 得 stop,即可觸發所有實現 LifeCycle 接口 bean 得 stop

      * 發布 ContextRefreshed 事件,整個 refresh 執行完成

       
      (文/葉展文)
      免責聲明
      本文僅代表作發布者:葉展文個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們刪除處理郵件:weilaitui@qq.com。
       

      Copyright ? 2016 - 2025 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

      粵ICP備16078936號

      微信

      關注
      微信

      微信二維碼

      WAP二維碼

      客服

      聯系
      客服

      聯系客服:

      在線QQ: 303377504

      客服電話: 020-82301567

      E_mail郵箱: weilaitui@qq.com

      微信公眾號: weishitui

      客服001 客服002 客服003

      工作時間:

      周一至周五: 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>
        • 主站蜘蛛池模板: 国产精品自在自线| 日韩精品电影一区| 国语高清精品一区二区三区| 午夜爽爽爽男女污污污网站| 中文字幕你懂的| 久久精品国产亚洲av无码麻豆| 18欧美乱大交| 欧美国产成人在线| 国产精品一卡二卡三卡| 亚洲人成网站在线观看播放青青 | 波多野结衣bd| 大胸年轻的女教师5中字| 国产男女无遮挡猛进猛出| 亚洲va在线va天堂成人| 日本高清视频色wwwwww色| 最新视频-88av| 国产午夜福利片在线观看| 久久久国产乱子伦精品| 色综合视频一区二区三区| 扒开双腿猛进入女人的视频| 国产欧美在线观看视频| 久久躁狠狠躁夜夜AV| 香蕉久久夜色精品升级完成| 日本三级在线观看免费| 国产99在线|亚洲| 久久国产精品电影| 色噜噜狠狠狠狠色综合久不 | 国产精品亚洲αv天堂2021| 五十路亲子中出在线观看| 青草青在线视频| 成人性生交大片免费视频| 免费黄色在线网站| 99j久久精品久久久久久| 欧美性色黄大片www喷水| 大肉大捧一进一出好爽视频动漫| 亚洲欧美另类色图| fc2成年免费共享视频网站| 波多野结衣1区| 国产特级毛片aaaaaa毛片| 久久久久亚洲AV无码专区桃色| 精品熟人妻一区二区三区四区不卡 |