前言
最近在和小夥伴們討論spring的內容,今天小鹹兒特來總結一波~
敘述
寶圖
先來看看spring各個模塊之間的關係
既然看到了spring的各個模塊關係圖,那麼我們就先來介紹一下spring的兩大模塊。
spring是什麼
Spring是一個開放源代碼的設計層面框架,它解決的是業務邏輯層和其他各層的鬆耦合問題,因此它將面向接口的編程思想貫穿整個系統應用。Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson創建。簡單來說,Spring是一個分層的JavaSE/EE full-stack(一棧式) 輕量級開源框架。
或者簡單說來就是一切從bean開始。
四個關鍵策略
- 1、基於POJO的輕量級和最小侵入性編程;
- 2、通過依賴注入和麪向接口鬆耦合;
- 3、基於切面和慣性進行聲明式編程;
- 4、通過切面和模板減少樣板式代碼;
IOC/DI
IOC:控制反轉,也就是說將需要實現的對象創建、依賴的代碼交給spring去實現。
DI:去賦值,維護好對象與對象之間的關係。
- spring-beans和spring-core是核心模塊,包含控制反轉(Inversion of Control,IOC)和依賴注入(Dependency Injection,DI)。
- spring-context模塊構架於核心模塊之上,擴展了BeanFactory,爲她添加了Bean生命週期控制、框架事件體系以及資源加載透明化
- spring-expression模塊是統一表達式語言(EL)的擴展模塊,可以查詢、管理運行中的對象,同時也方便的可以調用對象方法、操作數組、集合等。
AOP
AOP採取橫向抽取機制,取代了傳統縱向繼承體系重複性代碼。Spring AOP使用純java實現,不需要專門的編譯過程和類加載器,在運行期通過代理方式向目標類織入增強代碼。
縱向繼承:
橫向抽取:
實現原理:
- AOP底層採用代理機制進行實現。
- 接口 + 實現類:spring採用JDK的動態代理 Proxy。
- 實現類:spring採用cglib字節碼增強。
由spring-aspects和spring-instrument和spring-aop三個模塊組成。
- spring-aop是spring的另一個核心模塊,是AOP主要的實現模塊,以JVM的動態代理技術爲基礎,設計出了一系列的AOP橫切實現,比如前置通知、返回通知、異常通知等。
- spring-aspects模塊集成自AspectJ框架,主要是爲spring AOP提供多種AOP實現方法。
- spring-instrument模塊是基於Java SE中的“java.lang.instrument”進行設計的,應該算是AOP的一個支援模塊,主要作用是JVM啓動時,生成一個代理類。
總結
有關更多spring的內容分享,還請見小鹹兒的博客內容。
感謝您的閱讀~~