Leo Yeh's Blog

Spring 上課筆記 (1)

基本介紹

教學目標

初步了解 Spring Framework 的基本概念。

重點概念

Spring Framework 之父是 R.Johnson,他在 2002 年出版書籍「J2EE Design and Development」主要以架構描述的方式進行發表,並且在 2003 年再以開放原始碼的形式釋出第一版本。在當時有許多 Java 企業領域的開放原始碼在實務上皆有很不錯的表現,主要可以分為展現層、永續層和商務層,其中展現層以 Structs Framework 為主,永續層主要以 Hibernate 為主,然而卻只有商務層除了 EJB 之外,並沒有適合的開發原始碼,此時 Spring 就能解決此痛點。

首先設計理念主要是透過介面進行系統設計,以傳統 Java 物件為主,非侵入性,可模組化的輕量級服務,以及提供一致性的設定檔格式。接著架構主要有五大重點,分別為 Bean 容器、永續性相關機制支援、Spring AOP、Web 相關技術支援以及 Java EE 相關技術支援。再來理論基礎,主要為控制權倒置 (Inversion of Control,IoC) 和依賴性注入 (Dependency Injection,DI),深入了解理論基礎將有助於我們評估是否需用採用 Spring Framework。

所謂控制權倒置主要是將函式庫的重用方式改為框架的重用方式,其中核心概念有二個,第一個是在父類別中撰寫主流程,稱為 Template Method。第二個是在可變的部份以子類別負責實作的抽象方法為主。在 Template Method 中,我們將主流程封裝在父類別中,則稱為應用程式框架,其中內含主流程的父類別就是框架,透過繼承重用主流程的子類別就是元件,只要置換不同的子類別就能呈現不同的行為。

所謂依賴性主要是指當某一個類別繼承另一個類別、實作另一個介面或叫用到其它類別,我們就說此類別依賴另一個類別。一般來說依賴性感低,程式的可重用性會愈高。此外若我們要透過 Spring Framework 降低依賴性,基本上可透過 POJO 為基礎的程式設計,透過 AOP 來將特定的技術邏輯,也就是非功能方面的需求注入元件中,此外在執行時期 Spring 會做為元件之間的中間人將依賴關係進行注入。一般來說,我們會使用 new 運算子來產生物件,並且使用 setter 方法建立關係,透過 Factory 將物 件產生象化並且進行包裝,再將生成物件的責任委派給 Factory,此時可以設計一種的泛用的 Factory 專門用來產生並且組裝物件,就是所謂「輕量級容器」。接著當我們在使用輕量級容器時,實質上是物件生成的控制權的倒置,又稱 IoC Container 。但是框架重用的 IoC 指的是主流程主控權的倒置,而 IoC Container 中的 IoC 指的是物件生成主控權的倒置,因為容易造成混淆,所以 M.Fowler 建議使用依賴注入 (Dependency Injection,DI) 用於指稱物件生成主控權的倒置,其中依賴注入主要有三種型式,分別為 Setter Injection、Constructor Injection 和 Interface Injection,然而 Interface Injection 具有較強的侵入性,所以 Spring 只採用 Setter Injection 和 Constructor Injection。

總結 Spring 是個全方位的應用程式框架,主要功能為輕量級容器、實作依賴注入和非侵入性的框架、提供 AOP 機制應用於非功能性的需求、提供持久層和交易層的支援、提供 MVC Web 框架的實現… 等應用。

相關連結

⬅️ Go back