1. 簡化Java開發
簡化Java開發
Spring的誕生
應對應用的複雜性,Spring的關鍵策略
基於POJO的輕量級和最小侵入性程式設計
通過依賴注入和麵向介面實現鬆耦合
基於切面AOP和慣例進行宣告式程式設計
通過切面和模板減少樣板式程式碼
POJO之美
定義
POJO(Plain Old Java Objects):簡單普通的Java物件。
不具有任何特殊角色,不繼承/實現任何其他Java框架的類和介面。
很多框架具有侵入性,強迫開發者編寫與框架繫結的大量冗餘、難以測試的程式碼。
Spring強調基於POJO的最下侵入性程式設計
Spring不會強迫實現的特定規範的介面或繼承特定類
Spring通過依賴注入賦予POJO以魔力
J2EE中輕量級框架和重量級框架的概念:
簡單一句話:量級主要由對容器的依賴性決定,依賴性越小,越輕量
容器:用來管理元件行為的一個集合工具,元件的行為包括與外部環境的互動、元件的生命週期、元件之間的合作依賴關係等
在Java應用開發環境中,“輕量級Java”主要指兩個東西:簡化的程式設計模型和更具響應能力的容器。輕量級Java旨在消除與傳統JavaEE API有關的不必要的複雜性和限制,同時縮短應用程式的部署實現。
輕量級技術當中,控制反轉IoC(依賴注入DI)是關鍵。使用IoC,開發人員不需要編寫複雜的程式碼來執行查詢、處理基礎架構異常或管理連線,就能夠解決物件依賴性問題。這有助於簡化程式碼,將業務邏輯和基礎架構分離,從而是應用程式更容易維護。
輕量級Java的另一個特徵就是,它不會強迫業務物件遵循平臺特定介面。這允許開發人員在普通Java物件(POJO)中實現業務邏輯,從而提高生產率。
依賴注入
過於複雜的軟體系統,使得面向物件已經不夠。
元件化的思想:分離關注點,其目的是解耦合,實現每個元件塊時只關注元件內部的事情,要點就是明確定義元件之間的介面。
依賴注入:強制將元件的構建和使用分離,就像拼接泡沫板一樣,內部就自己內部管理,但是提供外部介面以供使用。
實用的Java系統由多個類組成,類之間互相協作完成特定的業務邏輯。
以往通常每個物件負責管理與之協作的物件(即所依賴的物件)的引用,導致高度耦合、難以測試。
耦合具有兩面性
耦合的程式碼難以測試
一定程度的耦合是不可避免的
依賴注入DI(Dependence Injection):物件的依賴關係由負責協調系統中各物件的第三方元件(通常是容器)在建立物件時設定。物件無需自己建立或管理它們的依賴關係——依賴關係將被自動注入到需要它們的物件中去。
依賴注入帶來的好處:鬆耦合
Spring通過應用上下文裝載Bean的定義並把它們組裝起來,應用上下文負責物件的建立和組裝。
應用切面
橫切關注點:諸如日誌、事務管理和安全等系統服務通常被稱為橫切關注點(跨越系統的多個元件)。以往通常這些橫切關注點分散到多個元件中去(融入到有自身邏輯業務的元件中),導致程式碼引入雙重複雜性:
遍佈系統的橫切關注點實現程式碼將會重複出現在多個元件中
元件會因為這些與自身業務無關的程式碼而變得複雜混亂
AOP(面向切面程式設計)使得這些業務模組化,並以宣告的方式將他們應用到需要的元件中去,AOP能確保POJO簡單。
使用模板消除樣板式程式碼
JDBC等使用Java API導致樣板式程式碼
Spring旨在通過模板封裝來消除樣板式程式碼
例如,我們在JDBC的操作中,有增刪改查操作,這些操作的程式碼共性很多,而且每一種操作真正的重要部分往往就那麼幾行程式碼,此時我們可以封裝一個JDBC模板類(JDBCTemplate),作為一個通用的JDBC操作。