Spring框架學習筆記(一):官方文件介紹,IoC與AOP概念學習

Rachel_YCWang發表於2019-01-19

最近實習用到Spring的開發框架,但是之前沒有接觸過,因此希望利用網上的資源來學習以下。

Spring官方給出了非常全面的介紹,非常適合我這種完全的小白……
在這一系列學習中,我閱讀的主要資源是5.1.2 Reference Doc.,以及論壇大神的講解blog。另外,Spring官方也給出了非常詳細的API文件,適合較為熟悉的使用者查閱。
由於本人完全入門級,因此決定從reference一點點讀起。

官方文件:Spring Framework Documentation
https://docs.spring.io/spring…

由於缺乏相關概念基礎,因此本文開頭對Spring官方文件的結構進行簡單介紹,之後講解Spring框架的兩大核心:IoC、AOP,在下一篇文章中再開始詳細學習Spring官方文件。


documentation主要包括6部分:Core, Testing, Data Access, Web Reactive, Integration, Language。

Core

這一部分介紹了Spring的一些基礎核心的技術和功能,屬於Spring必讀內容。Spring Framework中最重要的一部分是控制反轉容器(Inversion of Control container, IoC),而這一功能是由面向方面的程式設計技術(Aspect-Oriented Programming technology, AOP)實現的。IoC和AOP可以看作Spring框架最重要的兩個核心。

為了更詳細地闡釋Spring Framework的功能,這裡先介紹一下IoC和AOP兩個概念。

概念引入

1.IoC(控制反轉)與DI(依賴注入)

這一部分借鑑了論壇大神的分享:“談談對Spring IOC的理解”,https://blog.csdn.net/qq_2265…
這篇blog除講解控制反轉和依賴注入的理論認識以外,還提供了一個小的例項分析,值得閱讀。

IoC
IoC本質上是一種設計思想,在IoC中,開發者將設計好的物件交給容器控制,而不是在物件內直接控制。理解IoC的關鍵點如下:

  • 誰控制誰,控制什麼:在傳統的Java程式設計中,開發者在物件內部通過new建立新物件,是程式主動建立依賴物件;而在IoC中,專門有一個容器建立這些物件,即由IoC控制物件的建立。因此在IoC中,IoC容器控制物件,主要控制外部資源獲取(包括物件、檔案等)
  • 為何是反轉,哪些方面反轉:傳統java程式設計中,是由開發者自己在物件中主動控制去直接獲取依賴物件,即正轉;而在反轉中,是容器幫忙建立及注入依賴物件。反轉的含義即,容器幫我們查詢並注入依賴物件,物件只是被動地接收依賴物件。反轉的實際是依賴物件的獲取過程

IoC是Spring的核心。對於Spring而言,IoC的含義即由Spring來負責控制物件的生命週期和物件間關係。也就是說,所有的類都會在Spring的容器中登記,我們告訴Spring我們是什麼、需要什麼,由Spring在系統執行到適當的時候,將需要的東西主動給我們,同時也把我們交給其他需要我們的東西。
在傳統java開發中,所有類的建立、銷燬(即物件的生命週期)都由引用它的物件控制,而在Spring中,這一控制權轉移到了Spring容器中。

DI
DI(Dependency Injection, 依賴注入)可以理解為對IoC從另一個角度的描述。
DI的含義即,元件之間的依賴關係是由容器在執行期間決定的,由容器動態地將某個依賴關係注入到元件之中,即容器動態地向某個物件提供它所需要的外部資源(物件、資源、常量資料)。

這裡所謂的“依賴”,指的就是程式中的物件依賴於IoC容器。

IoC注入的型別
包括三種:建構函式注入、屬性注入和介面注入。
其中,Spring支撐建構函式注入和屬性注入兩種。

  • 建構函式注入:通過呼叫類的建構函式,將介面實現類通過建構函式變數傳入。這種方法在呼叫類建立的時候就將介面實現類的依賴傳入。
  • 屬性注入:有選擇地通過setter方法完成呼叫類所需依賴的注入,而無需在建立類時注入,更加靈活方便。
  • 介面注入:將呼叫類所有依賴注入的方法抽取到一個介面中,呼叫類通過實現該藉口提供相應的注入方法。通過介面注入需要額外宣告一個介面,增加了類的數目,且其效果與屬性注入無本質區別,因此不提倡。
  • 通過容器完成依賴關係的注入:由容器完成類的初始化與裝配工作,讓開發者從底層實現類的例項化、依賴關係裝配等工作中脫離出來,專注於業務邏輯開發工作。Spring框架即這樣的容器,它通過配置檔案或註解描述類和類之間的依賴關係,自動完成類的初始化和依賴注入工作。

2.AOP面向方面程式設計

AOP概念的學習借鑑了這篇blog:“Spring3: AOP”, http://www.cnblogs.com/xrq730…

AOP可以理解為物件導向程式設計(OOP)的補充和完善。OOP通過引入封裝、繼承、多型等概念建立了物件的層次結構,適用於定義物件間的縱向關係。但對於物件的橫向關係的定義,OOP並不適用,因此提出了AOP的概念。

AOP主要關注影響了多個類的公共行為,例如日誌程式碼、異常處理、安全性等,這類程式碼與所對應的物件的核心功能(業務功能)毫無關係。在OOP中,這類程式碼會導致大量冗餘,不利於模組重用。而在AOP中,其使用“橫切”(cross cutting)技術,將這類程式碼從原屬的封裝物件中提取出來,封裝到一個可重用模組中,稱為“Aspect”。這樣的操作降低了模組間的耦合度,利於操作和維護。

在AOP中,其將軟體系統分為“核心關注點”和“橫切關注點”。其中,“橫切關注點”為橫切出來的aspect,“核心關注點”為然軟體系統的主體業務程式碼。AOP的作用即將二者分離。

對Spring Framework中兩大核心概念的簡答介紹就到這裡,下一篇開始正式學習Spring framework的文件。

相關文章