1. 程式人生 > >2.知識點拾遺-輕量級容器和控制反轉

2.知識點拾遺-輕量級容器和控制反轉

POJO程式設計模型

原來的EJB程式設計模型存在的問題

​ 笨重,業務程式與EJB框架耦合嚴重,無法在JEE平臺之外執行元件,開發-打包-部署-測試流程長且複雜。

POJO程式設計模型的優點

​ 簡單,輕量,無耦合

輕量級容器和控制反轉

輕量級容器

​ 有這麼一個容器,能夠提供業務需要的各種元件(比如資料庫連線、事務、快取),而這些元件是同個“插拔”的方式引入到容器來的,業務按需通過組合的方式引入相關的元件

控制反轉

​ 原來業務程式依賴某一元件或者某一其他業務,需要自己顯示地展示依賴邏輯,比如 類A,依賴類B和Jdbc, 方式大概如下:

public class B {}
public Class A {
    private B b;
    private JdbcTemplate template; // jdbc
}

public A() {
    this.b = new B();
    this.template = new MysqlJdbcTemplate();
}

​ 這時 A對B和jdbc的依賴初始化需要A來控制,A與B/Jdbc就耦合起來了,如果更換B/jdbc的實現,需要改動程式碼。控制反轉就是把這些依賴,初始化等,交給容器,初始化好後,塞給A,A不參與,這樣,耦合性大大降低;控制,由A轉換到了容器,故稱控制反轉。

​ 控制反轉主要由兩種形式:依賴查詢和依賴注入

​ 依賴查詢:容器向其管理元件提供了回撥方法,而元件則通過這些回撥方法與容器進行互動並顯式地獲取他們的依賴項,這種情況下,通常使用一個查詢上下文來訪問依賴元件以及容器管理的其他內容資源。如應用實現ApplicationContextAware,把BeanFactory回傳給應用,供應用獲取相要的資源,再比如JDNI通過上下文查詢到DataSource.

​ 依賴注入:元件提供合適的setter或者建構函式,以便容器可以注入依賴元件。

依賴注入

​ 基本原則是,應用程式,不應該建立、查詢他說依賴資源或者協作者,交給容器,由容器負責這些依賴資源的建立和注入,實現資源查詢的外部化。主要分為 通過建構函式注入和通過Setter方法注入。

​ 通過建構函式注入:能夠在初始化時就固定好初始化的值,簡潔,但無法處理迴圈依賴問題,過載構造器也會產生問題

​ 通過Setter方法注入:在元件完成建立後,可以進行重新配置,元件的依賴,可以在執行時進行更改,可以解決迴圈依賴問題