二維碼
        企資網(wǎng)

        掃一掃關(guān)注

        當(dāng)前位置: 首頁 » 企資頭條 » 房產(chǎn) » 正文

        refresh是什么?Spring_refre

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

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

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

        功能分類

        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 - 保存自定義鍵值,例如來自于 *.properties 文件得鍵值

        2. obtainFreshBeanFactory

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

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

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

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

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

        3. prepareBeanFactory

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

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

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

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

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

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

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

        * ApplicationContextAwareProcessor 用來解析 Aware 接口

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

        4. postProcessBeanFactory

        * 這一步是空實(shí)現(xiàn),留給子類擴(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),可以用來補(bǔ)充或修改 BeanDefinition

        * 常見得 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í)例化、依賴注入、初始化階段,常見得有:

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

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

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

        7. initMessageSource

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

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

        8. initApplication ContextEventMulticaster

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

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

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

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

        9. onRefresh

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

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

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

        10. registerListeners

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

        * 事件監(jiān)聽器顧名思義,用來接收事件廣播器發(fā)布得事件,有如下近日

        * 事先編程添加得

        * 來自容器中得 bean

        * 來自于 等EventListener 得解析

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

        11. finishBeanFactory Initialization

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

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

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

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

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

        12. finishRefresh

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

        * 如果容器中有名稱為 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é)聲明
        本文為葉展文推薦作品?作者: 葉展文。歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明原文出處:http://www.sneakeraddict.net/news/show-294712.html 。本文僅代表作者個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,作者需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問題,請(qǐng)及時(shí)聯(lián)系我們郵件:weilaitui@qq.com。
         

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

        粵ICP備16078936號(hào)

        微信

        關(guān)注
        微信

        微信二維碼

        WAP二維碼

        客服

        聯(lián)系
        客服

        聯(lián)系客服:

        在線QQ: 303377504

        客服電話: 020-82301567

        E_mail郵箱: weilaitui@qq.com

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

        客服001 客服002 客服003

        工作時(shí)間:

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

        反饋

        用戶
        反饋

        国产 欧美 亚洲 中文字幕| 最近免费字幕中文大全视频| 亚洲第一中文字幕| 久久中文精品无码中文字幕| 无码AV中文字幕久久专区| 亚洲AV中文无码乱人伦| 中文字幕一区一区三区| 在线a亚洲v天堂网2019无码 | 亚洲乱码中文字幕综合| 无码人妻精品一区二区蜜桃百度| 国产精品va在线观看无码| 久久ZYZ资源站无码中文动漫| 亚洲国产精品成人精品无码区在线 | 亚洲中文字幕AV在天堂| 国产网红主播无码精品| 中文字幕国产91| 中文字幕无码成人免费视频| 国产免费无码AV片在线观看不卡| 久久久久久亚洲AV无码专区| 亚洲色中文字幕无码AV| 成人无码区免费A∨直播| 久久精品中文字幕第23页 | 最近2019中文字幕免费大全5| 国产在线无码不卡影视影院| 久久久中文字幕日本| 天码av无码一区二区三区四区| 国产亚洲精久久久久久无码77777| 亚洲中文字幕久久精品无码喷水 | 久久99中文字幕久久| 18禁网站免费无遮挡无码中文 | 少妇极品熟妇人妻无码| 久久久无码精品亚洲日韩蜜臀浪潮| 中文字幕日韩精品在线| 熟妇人妻中文字幕无码老熟妇| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲成A人片在线观看无码不卡 | 色窝窝无码一区二区三区成人网站 | 无码夫の前で人妻を侵犯| 无码精品人妻一区二区三区免费看 | 中文字幕无码一区二区免费 | 少妇无码一区二区二三区|