首先,我們來說說什麼是dependency ?
簡單來說,一個Java應用程式就是由很多個物件(Object)之間互動所組成的。這其中的互動關係就形成了所謂物件之間的dependency
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class A { B bObj; C cObj; public A(B bObj, C cObj){ ...... } void doAction(){ bObj.doSomething(); cObj.doSomething(); } } |
以上面的例子來看,A class 就有兩個dependencies,分別是B, C class
而dependency injection 所指的就是這些dependencies並非是 A class 自己所創建,而是經由外部注入(injection),像上面例子我們可以看到,B,C的物件參考(object reference),可以透過A class的建構子(constructor)來傳入。
dependency injection的實作方式有好幾種,像上面例子就是”constructor injection”
另一種模式則是”setter injection”,顧名思義就是透過Java bean的setter機制來傳入物件參考,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class A { B bObj; C cObj; void doAction(){ bObj.doSomething(); cObj.doSomething(); } public void setBObj(B bObj){ this.bObj = bObj; } public void setCObj(C cObj){ this.cObj = cObj; } } |
上面提到兩種注入方式,那麼又是誰來負責呼叫這些constructor 或是 setter 來達到依賴注入的效果呢?答案就是「Spring 容器 (container)」
在Spring 容器裡,我們會定義很多像上述A,B,C類型的物件,以Spring的術語來說叫做”Bean”
Spring 作為一個IoC容器 ,其中一個重大的責任就是負責這些Bean的創建、處理Bean之間的依賴注入、管理Bean的生命週期
IoC (inverstion of control, 控制反轉) :物件之間的依賴關系由過去傳統的自行建立的方式轉變為「由容器操控」
下一篇,將會為大家介紹Spring 是怎麼實作IoC容器這麼一個概念的。
Facebook Comments