spring 解析初始化過程

2021-08-09 05:29:09 字數 1859 閱讀 9076

1.xmlbeandefinitionreader 讀取解析檔案 解析encodedresource 編碼,

校驗dtd,xsd,可以手動配置,沒有配置自動檢測,檢測方法有沒有doctype  resolveentity 本地dtd 檔案頭 publicid systemid

忽略介面 beannameaware,beanfactoryaware beanclassloaderaware 

(資源檔案classpathresource filesystemresource ...包裝,同一實現resource 介面 ,底層檔案操作乙個方法)

最後獲取document

2.xmlbeanfactoryreader sax 解析document 生成

3.defaultbeandefinitiondocumentreader 提取root,記錄上下文

解析profile 分支,生成**為了解析自定義節點 ,根據namespace 判斷是否是自定義節點,然後對應節點 default節點 custom節點

解析bean beans alias import 

4.解析生成beandefinition 生成genericbeandefinition 承載例項 

後解析剩餘屬性 scope lazy-init singleton factory-method destoy-method 等

解析look-up replace-method 

建構函式 ref 和value 不一樣 的,但是都繼承 beanmetadataelement介面返回值一樣的

如果有子元素在解析子元素

list map set property等

解析完成後再genericbeandefinition 中也在abstractbeandefinition 中存放

在 beandefinitionregistry 中註冊,註冊前進行method-overrides 校驗,beandefinitionmap 是否有註冊並且是否是可覆蓋,defaultlistablebeanfactory

清空解析留下的快取。

獲取bean 時直接在此獲得

///解析完成

configurablelistablebeanfactory

1.beanname轉換:別名轉換和beanfactory型別的呼叫getobject方法得到

defaulsingletonbeanregistry 單例註冊地

abstractbeanfactory 裡面getbean方法獲得bean

如果快取不等於空直接獲得bean ,根據bean型別判斷是否是beanfactory ,是否是單例factorybeanobjectcache ,單例做快取 是呼叫getobject,

呼叫 一系列 postprocess方法 如beanpostprocessor  beanfactorypostprocessor  允許做一層**,返回bean 例項

例項完之後,新增依賴,autowirebyname 除去簡單的string 等的,通過properties 屬性,遞迴呼叫getbean 賦值,dependmap 存放bean 依賴

註冊初始化方法,比如beannameaware beanfactoryaware

如果允許提前暴露,則根據dependmap 獲得依賴新增校驗拋異常

註冊disposebean方法

單例迴圈依賴,

1構造器解決不了丟擲異常

2setter 提前暴露objectfactory 得到引用

2prototype 拋異常

2.propertyeditorsupport 屬性編輯器 自定義擴充套件類

3.呼叫 一系列 postprocess方法 如beanpostprocessor  beanfactorypostprocessor 

Spring容器初始化過程

1.preparerefresh 初始化placeholder source,校驗xml檔案 2.建立bean容器,載入並註冊bean。bean並沒有完成初始化,bean例項化未完成 初始化乙個defautllistablebeanfactory,載入beandefintion到beanfactor...

Spring初始化 啟動過程

為了讓web容器啟動時,也初始化spring,則需要在web.xml中配置 contextloaderlistener,web容器啟動時觸發 初始化spring org.springframework.web.context.contextloaderlistener 1.contextloader...

Spring核心之容器初始化過程

我們經常說的spring其實指的是spring framework spring 框架 spring的核心就是ioc 控制反轉 和aop 面向切面程式設計 ioc簡單理解就是控制物件建立的角色由程式設計師反轉為spring ioc容器 其中beanfactory介面是spring早期建立bean物件...