Spring致力於簡化企業級Java開發, 促進代碼的鬆散耦合。 成功的關鍵在於依賴注入和AOP。
依賴注入(dependencyinjection, DI)
解釋:
DI是組裝應用對象的一種方式,藉助這種方式對象無需知道依賴來自何處或者依賴的實現方式。 不同於自己獲取依賴對象, 對象會在運行期
賦予它們所依賴的對象。 依賴對象通常會通過接口
瞭解所注入的對象, 這樣的話就能確保低耦合。簡單的說就是多態的使用.
作用:
DI能夠讓相互協作的軟件組件保持鬆散耦合
不使用依賴注入的情況,對象的產生在類內部(緊耦合)
使用依賴注入的情況(鬆耦合,運行時才知道正真的實例對象)
面向切面編程(aspect-oriented programming,AOP)
解釋:
AOP可以幫助應用將散落在各處的邏輯彙集於一處——切面。 當Spring裝配bean的時候, 這些切面能夠在運行期編織起來, 這樣就能非常有效地賦予bean新的行爲。
作用:
把遍佈應用各處的功能分離出來形成可重用的組件
實踐應用:
基於SpringAOP的日誌模塊 (需要調研)
基於SpringAOP的安全模塊 (需要調研)
基於SpringAOP實現聲明式事務和安全(第9章和第14章) 。
比如: 講師開始上課,要開始計時打開(輸入上課日誌,和下課日誌,來配置)
不使用切面編程時,每個對象不但要知道它需要記日誌、 進行安全控制和參與事務, 還要親自執行這些服務。
使用AOP系統範圍內的關注點覆蓋在它們所影響組件之上,不改變原有業務邏輯
舉例子說明:
無AOP時如何實現
有AOP時的實現?
Spring的使命
Spring 可以做非常多的事情。 但歸根結底, 支撐Spring的僅僅是少許的基本理念, 所有的理念都可以追溯到Spring根本使命上: 簡化Java開發
。爲了降低Java開發的複雜性, Spring採取了以下4種關鍵策略:
- 基於POJO的輕量級和最小侵入性編程;
- 通過依賴注入和麪向接口實現鬆耦合;
- 基於切面和慣例進行聲明式編程;
- 通過切面和模板減少樣板式代碼。
POJO(Plain Ordinary Java Object)簡單的Java對象
,實際就是普通JavaBeans,是爲了避免和EJB混淆所創造的簡稱。
使用POJO名稱是爲了避免和EJB混淆起來, 而且簡稱比較直接. 其中有一些屬性及其getter setter方法的類,沒有業務邏輯
,有時可以作爲VO(value -object)或dto(Data Transform Object)來使用.當然,如果你有一個簡單的運算屬性也是可以的,但不允許有業務方法
,也不能攜帶有connection之類的方法。
參考: https://baike.baidu.com/item/POJO/3311958?fr=aladdin
總結
DI(依賴注入)和AOP (切面編程)是Spring框架最核心的部分, 因此只有理解了如何應用Spring最關鍵的功能, 你纔有能力使用Spring框架的其他功能。 本文, 我們只是觸及了Spring DI和AOP特性的皮毛。 在接下來的文章中,我們將深入探討DI和AOP。