Spring解密-Bean 載入流程
是一個開源的設計層面框架,解決了業務邏輯層和其他各層的松耦合問題,將面向介面的編程思想貫穿整個系統應用,同時它也是 必備技能之一...
前言
在 Spring解密 - XML解析 與 Bean註冊 中,講了 ,本章將詳細講解,相比 而言,載入稍微複雜一點.
入口
重點分析
解密
在分析 的載入過程前,我們看看 的由來,以及 所屬的類是誰。磨刀不誤砍柴工
BeanFactory 的由來
1.查看的源碼,此處的 是怎麼來的?
2.應用程序的上下文
在 中,跳轉到重載的構造方法中,我們會發現如下代碼
它的目的是將普通路徑解析為路徑資源名稱。多個配置文件的情況下,後載入的 會覆蓋先前定義好的,這樣做的目的是為了通過額外的XML文件來特意重寫某個 。這裡我們可以看到調用了一個 ,它的作用是什麼呢?
3.初始化
刷新容器
初次載入完 後,肯定會進入到 方法中,這個時候會做容器初始化的工作,也就是等等工作,由於本章重點介紹 ,所以只貼了少量代碼(看官莫急)
創建
從上面的代碼塊中,我們可以看到,最後 就可以正常使用了。
Bean 載入
整個 的裝載過程中,重點圍繞 ,只要把它搞定剩下的就輕鬆了
整個代碼塊的內容還是不少的,接下來我們一步一步的分析。
轉換 BeanName
去除 的修飾符,最終取指定 所表示的 。因為有可能獲取到以&開頭的 ,所以要進行轉化(關於和後面會進行區分)
載入單例
檢查緩存中是否存在 該 的單例,如容器初始化的時候或者其他地方已經調用過 完成了初始化
緩存載入 Bean
默認在裝載 的時候會先去檢查 是否存在,如果存在直接提取緩存的。
構建實例(無緩存情況)
緩存中沒有,那就當場構建一個 出來,可以看到有兩個參數,其中的是怎麼來的呢?接著往下看
構建
此處與其說是構建,不如說是在創建一個單例
創建 Bean
在創建 之前, 還做了不少工作。


TAG:battcn |