1. 程式人生 > >三大框架之Spring(1)

三大框架之Spring(1)

什麼是框架?

框架就是一個重複程式碼的集合。可以使用框架來解決程式中集中、重複和通用的模組程式碼,提高程式設計師的開發效率,縮短專案週期。

Spring

Spring是一個輕量級的框架,並且是開源的,主要作用是能夠整合現階段所有的主流框架,負責所有框架的排程和整合,使各個框架之間呼叫更加流暢、快捷。(粘合劑的作用)

怎麼理解輕量級呢?
spring的core不到1MB,佔用計算機資源很小;對於容器依賴性小。

Spring IoC
IOC就是控制反轉,就是將物件建立的權利交給spring容器來完成。從此程式設計師無需關注物件的建立過程。spring容器來維護物件的生命週期。

Spring IoC 的實現步驟:

1.匯入相關jar包

這裡寫圖片描述

2.建立實體類

這裡寫圖片描述

3.編寫Spring的配置檔案(配置檔案頭,編寫類的對應關係)

這裡寫圖片描述

4.建立Spring容器
5.從容器中獲取物件,物件呼叫方法,完成相應的功能

這裡寫圖片描述

Spring 是如何建立物件的呢?
獲得class屬性的值通過反射呼叫建立物件。

ClassPathXmlApplicationContext的原始碼:(看英文註釋就OK)
這裡寫圖片描述

getBean原始碼:
這裡寫圖片描述

載入時會將所有單例的bean例項化並且加入到HashMap中,在之後需要單例bean之時直接從hashmap中取,如果hashmap中沒有則從spring容器中例項化並且將其放入hashmap,而非單例bean是不會被放入hashmap中,只會從spring容器中載入。
這裡寫圖片描述

Spring的標頭檔案的生成方式
1.通過拷貝的形式
2.通過約束檔案自動生成

約束檔案格式
1.schema 有嚴格的目錄結構
2.DTD

匯入約束檔案:

這裡寫圖片描述
這裡寫圖片描述

匯入約束的效果 能夠實現在沒有網的條件下 所有的標籤能夠自動提示。

通過約束生成標頭檔案:

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

bean的寫法
class型別最好使用自動補齊功能,如果包名過長,手敲可能會出錯。
id的寫法:首字母小寫,其他按照駝峰規則定義。見名知意,通常就寫類名。

物件的建立的方式
1.構造方法建立物件–使用頻率最高
如果構造方法過載,那麼一定要加無參構造,如果沒有無參構造,那麼預設的物件建立方式必然出錯。

2.靜態工廠建立物件

這裡寫圖片描述

最為關鍵的部分–static
這裡寫圖片描述
spring的執行過程:
在spring容器啟動時,先會載入applicationContext.xml這個配置檔案,根據每一個bean建立物件,解析到factory-method屬性時,
先到class中找到該方法,之後直接呼叫執行,執行以後創建出來Calendar物件。
如果沒有static關鍵字,執行不會成功。

3.例項工廠:

這裡寫圖片描述

這裡寫圖片描述

例項工廠建立物件,先建立工廠物件,然後呼叫工廠物件的getCalendar方法,建立Calendar物件交給spring。

4.Spring工廠

這裡寫圖片描述

這裡寫圖片描述

當實現FactoryBean介面後,spring容器在啟動的時候就會自動的呼叫getObject()建立物件。

Spring物件的建立過程:
當spring容器啟動的時候,先會載入applicationContext.xml,逐行解析,
遇到每一個bean都會為這個bean建立物件,然後存入到map中,直到整個xml配置檔案解析完成,spring容器才啟動成功,在容器啟動完成以後,才能為使用者提供服務。

Spring建立物件的單例和多例

預設條件下,Spring建立物件預設都是單例的。
這裡寫圖片描述
可以通過scope屬性來控制物件的單例和多例。讓物件建立方式更加靈活

物件的懶載入問題:

關於Spring bean建立的優化,在使用者需要呼叫物件的時候,物件才會被創建出來。
當用戶呼叫getBean()方法時 物件才建立—–理想狀態

懶載入的實現:

lazy-init=”default”和預設不寫時 懶載入不生效
lazy-init=”false” 懶載入不生效
lazy-init=”true” 懶載入生效

Scope=”prototype” lazy-init=”false”
當物件的建立形式為多例時,所有物件的建立都是懶載入

Spring容器,對於多例物件,只管建立,其他都不管。