1. 程式人生 > >Container and Injection

Container and Injection

實現 spa size 過程 injection font 生命 說明 proto

Container

廣義上講容器是用來包裝或裝載物品的貯存器(如箱、罐、壇)或者成形或柔軟不成形的包覆材料。在編程領域中,容器提供組件運行的環境,容器本身可以提供一組服務,讓組件按標準方式利用。

Spring 提供容器功能,容器可以管理對象的生命周期、對象與對象之間的依賴關系,您可以使用一個配置文件(通常是XML),在上面定義好對象的名稱、如何產生(Prototype 方式或Singleton 方式)、哪個對象產生之後必須設定成為某個對象的屬性等,在啟動容器之後,所有的對象都可以直接取用,不用編寫任何一行程序代碼來產生對象,或是建立對象與對象之間的依賴關系。
換個更直白點的說明方式:容器是一個Java 所編寫的程序,原先必須自行編寫程序以管理對象關系,現在容器都會自動幫您作好。

The History

1979年 — Chroot

2000年 — FreeBSD Jails

2004年 — Solaris Zones

2008年 — LXC

2013年 — Docker

2016年 — Windows容器

Windows Server 容器

Hyper-V 容器

Injection

依賴註入不是目的,它是一系列工具和手段,最終的目的是幫助我們開發出松散耦合(loose coupled)、可維護、可測試的代碼和程序。

第一種情況下,Java實例的調用者創建被調用的Java實例,必然要求被調用的Java類出現在調用者的代碼裏。無法實現二者之間的松耦合。


第二種情況下,調用者無須關心被調用者具體實現過程,只需要找到符合某種標準(接口)的實例,即可使用。此時調用的代碼面向接口編程,可以讓調用者和被調用者解耦,這也是工廠模式大量使用的原因。但調用者需要自己定位工廠,調用者與特定工廠耦合在一起。

第三種情況下,調用者無須自己定位工廠,程序運行到需要被調用者時,系統自動提供被調用者實例。事實上,調用者和被調用者都處於Spring的管理下,二者之間的依賴關系由Spring提供

Container and Injection