Spring啟動過程分析 啟動流程簡介

2021-09-12 22:52:07 字數 2447 閱讀 7508

首先,對於乙個web應用,其部署在web容器(tomcat)中,web容器提供其乙個全域性的上下文環境,這個上下文就是servletcontext,其為後面的spring ioc容器提供宿主環境

spring容器啟動流程

定位在spring中,使用統一的資源表現方式resource,定位到spring配置檔案。

載入在載入這個過程中,主要工作是讀取spring配置檔案解析配置檔案中的內容,將這些資訊轉換成為spring內容可以理解、使用的beandefinition

註冊載入過配置檔案後,就將beandefinition資訊註冊到beandefinitionregistry介面中,通常情況下spring容器的實現類都實現這個介面。註冊其實就是把beannamebeandefinition作為鍵值對放到beanfactory物件的map

定位)spring容器對應的bean定義的配置由web.xml中的context-param標籤指定;

載入)spring在初始化容器時,會先解析和載入所有的bean class,如果符合要求則通過class生成beandefinition;

註冊在載入完所有bean class後存入beanfactory中開始有序的通過beandefinition例項化bean註冊其實就是把beannamebeandefinition作為鍵值對放到beanfactory物件的map

配置類可以是spring容器的起始配置類,也可以是通過@componentscan掃瞄得到的類,也可以是通過@import引入的類。如果這個類上含有@configuration,@component,@componentscan,@import,@importresource註解中的乙個,或者內部含有@bean標識的方法,那麼這個類就是乙個配置類,spring就會按照一定流程去解析這個類上的資訊。

在解析的第一步會校驗當前類是否已經被解析過

在1,3,4,6中都有遞迴操作,也就是在解析乙個bean class a時發現其上能夠獲取到其他bean class b資訊,此時會遞迴的解析bean class b,在解析完bean class b後再接著解析bean class a,可能在解析b時能夠獲取到c,那麼也會先解析c再解析b,就這樣不斷的遞迴解析

在第3步中,通過@componentscan掃瞄直接得到的bean class會被立即加載入beandefinitionnames中,但@import和@bean形式定義的bean class則不會,也就是說正常情況下面@componentscan直接得到的bean其實例化時機比其他兩種形式的要早。

過@bean和@import形式定義的bean class不會立即載入他們會被放入乙個configurationclass類中,然後按照解析的順序有序排列,就是上的 「將配置類有序排列」。乙個configurationclass代表乙個配置類,這個類可能是被@componentscan掃瞄到的,則此類已經被載入過了;也可能是被@import引入的,則此類還未被載入;此類中可能含有@bean標識的方法。

spring在解析完了所有bean class後開始載入configurationclass。如果這個configurationclass是被import的,也就是說在載入@componentscan時其未被載入,那麼此時載入configurationclass代表的bean class。然後載入configurationclass內的@bean方法

順序總結:@componentscan > @import > @bean

ARM Linux啟動過程分析

5 呼叫 linux核心映像 bootloader完成的最後一項工作便是呼叫 linux核心。如果 linux 核心存放在 flash 中,並且可直接在上面執行 這裡的 flash 指 nor flash 那麼可直接跳轉到核心中去執行。但由於在 flash 中執行 會有種種限制,而且速度也遠不及 r...

Linux啟動過程分析

boot loader 當cpu一上電,此時cpu必須從nor flash或者nand flash中取指令 直接從 nand flash取指令的ap為支援nand 啟動 nand boot 其實原理就是ap 內部的rom裡有一小段 包括nand flash驅動,它啟動從nand flash中讀取一段...

ARM Linux啟動過程分析

arm linux啟動過程分析 在 bootloader將 linux 核心映像拷貝到 ram 以後,可以通過下例 啟動linux 核心 call linux 0,machine type,kernel params base 其中,machine tpye是 bootloader檢測出來的處理器型...