嵌入式Servlet容器啟動(dòng)原理

什么時(shí)候創(chuàng)建嵌入式的Servlet容器工廠?什么時(shí)候獲取嵌入式的Servlet容器并啟動(dòng)Tomcat;

獲取嵌入式的Servlet容器工廠:

  1. springboot應(yīng)用啟動(dòng)運(yùn)行run方法
  2. refreshContext(context):springBoot刷新IOC容器[創(chuàng)建IOC容器對(duì)象,并初始化容器,創(chuàng)建容器中的每一個(gè)組件];如果是web應(yīng)用創(chuàng)建web.servlet.context.AnnotationConfigServletWebServerApplicationContext, 否則,創(chuàng)建默認(rèn)的AnnotationConfigReactiveWebServerApplicationContext;
  3. refresh(Context)刷新剛才創(chuàng)建的容器.
@Override
    public void refresh() throws BeansException, IllegalStateException {
        synchronized (this.startupShutdownMonitor) {
            // Prepare this context for refreshing.
            prepareRefresh();

            // Tell the subclass to refresh the internal bean factory.
            ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

            // Prepare the bean factory for use in this context.
            prepareBeanFactory(beanFactory);

            try {
                // Allows post-processing of the bean factory in context subclasses.
                postProcessBeanFactory(beanFactory);

                // Invoke factory processors registered as beans in the context.
                invokeBeanFactoryPostProcessors(beanFactory);

                // Register bean processors that intercept bean creation.
                registerBeanPostProcessors(beanFactory);

                // Initialize message source for this context.
                initMessageSource();

                // Initialize event multicaster for this context.
                initApplicationEventMulticaster();

                // Initialize other special beans in specific context subclasses.
                onRefresh();

                // Check for listener beans and register them.
                registerListeners();

                // Instantiate all remaining (non-lazy-init) singletons.
                finishBeanFactoryInitialization(beanFactory);

                // Last step: publish corresponding event.
                finishRefresh();
            }

            catch (BeansException ex) {
                if (logger.isWarnEnabled()) {
                    logger.warn("Exception encountered during context initialization - " +
                            "cancelling refresh attempt: " + ex);
                }

                // Destroy already created singletons to avoid dangling resources.
                destroyBeans();

                // Reset 'active' flag.
                cancelRefresh(ex);

                // Propagate exception to caller.
                throw ex;
            }

            finally {
                // Reset common introspection caches in Spring's core, since we
                // might not ever need metadata for singleton beans anymore...
                resetCommonCaches();
            }
        }
    }
  1. onRefresh(); web的IOC容器重寫了onfresh方法.
    web ioc容器會(huì)創(chuàng)建嵌入式的servlet容器:createWebServer();
  2. ServletWebServerFactory factory = getWebServerFactory();
  3. 獲取嵌入式的servlet容器工廠,
    從ioc容器中獲取ServletWebServerFactory組件,TomcatServletWebServerFactory創(chuàng)建對(duì)象,后置處理器一看是這個(gè)對(duì)象,就獲取所有的定制器來先定制servlet容器的相關(guān)配置
  4. 使用容器工廠獲取嵌入式的servlet容器
  5. 嵌入式的servlet容器創(chuàng)建對(duì)象,并啟動(dòng)servlet容器,

先啟動(dòng)嵌入式的servlet容器,在將ioc容器中剩下的沒有創(chuàng)建出的對(duì)象獲取出來.

ioc容器啟動(dòng)創(chuàng)建嵌入式的servlet容器.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市隘擎,隨后出現(xiàn)的幾起案子盟戏,更是在濱河造成了極大的恐慌姚建,老刑警劉巖弓候,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡近迁,警方通過查閱死者的電腦和手機(jī)明肮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門菱农,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晤愧,你說我怎么就攤上這事大莫。” “怎么了官份?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵只厘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我舅巷,道長(zhǎng)羔味,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任钠右,我火速辦了婚禮赋元,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己搁凸,他們只是感情好媚值,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著护糖,像睡著了一般褥芒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嫡良,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天锰扶,我揣著相機(jī)與錄音,去河邊找鬼寝受。 笑死坷牛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的很澄。 我是一名探鬼主播京闰,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼痴怨!你這毒婦竟也來了忙干?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤浪藻,失蹤者是張志新(化名)和其女友劉穎捐迫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爱葵,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡施戴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萌丈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赞哗。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辆雾,靈堂內(nèi)的尸體忽然破棺而出肪笋,到底是詐尸還是另有隱情,我是刑警寧澤度迂,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布藤乙,位于F島的核電站,受9級(jí)特大地震影響惭墓,放射性物質(zhì)發(fā)生泄漏坛梁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一腊凶、第九天 我趴在偏房一處隱蔽的房頂上張望划咐。 院中可真熱鬧拴念,春花似錦、人聲如沸褐缠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽送丰。三九已至缔俄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間器躏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工蟹略, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留登失,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓挖炬,卻偏偏與公主長(zhǎng)得像揽浙,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子意敛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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