Spring高級程序設計
第3章 控制反轉
1、控制反轉和依賴注入
2、控制反轉類型
3、Spring中的控制反轉
4、基於Spring的依賴注入
1控制反轉和依賴注入
控制反轉(IoC)。依賴注入(DI)。
實際上依賴注入是控制反轉的一種特殊形式。
控制反轉和依賴注入的核心目標是提供一個更為簡單的機制去規定和組件之間的依賴關係(他通常被稱作為對象的協助者),並在他們的生命周期中管理這些依賴。
一個需要某些特定依賴的組件通常被稱為依賴對象或者目標。控制反轉提供的服務使一個組件能夠在他的生命周期中訪問他的依賴和服務,使用這個這種方法與他的依賴進行交互,這是一件非常美妙的事情。
大體來說,控制反轉可以分為兩個子類型:依賴注入和依賴查找。這些字類型又能劃分成控制反轉服務的若干具體實現。以此定義我們可以清楚的知道,當我們談論依賴注入時我們總是在談論控制反轉,反之則不然。
2控制反轉類型
依賴查找有兩種類型:依賴拖拽和上下文依賴查找(CDL)。
依賴注入兩種類型:構造方法依賴注入和設置方法依賴注入。
依賴拖拽示例:
- /**
-
*
控制反轉--依賴查找--依賴拖拽 -
*
@author partner4java - *
- */
-
public class DependencyPullDemo
{ -
public static void main(String[]
args) { -
BeanFactory
beanFactory = getBeanFactory(); -
MessageService
messageService = (MessageService) beanFactory.getBean("service"); - messageService.execute();
- }
-
private static BeanFactory
getBeanFactory(){ -
DefaultListableBeanFactory
beanFactory = new DefaultListableBeanFactory(); -
BeanDefinitionReader
reader = new PropertiesBeanDefinitionReader(beanFactory); - reader.loadBeanDefinitions(new ClassPathResource("/META-INF/spring/ioc-pull-context.properties"));
- return beanFactory;
- }
- }
上下文依賴查找(CDL):
在某些方面跟依賴拖拽相似,但是上下文依賴查找中,查找的過程是在容器管理的資源中進行的,而不是從集中註冊表中,並且通常是作用在某些設置點上。
- /**
-
*
控制反轉--依賴查找--上下文依賴查找(CDL) -
*
@author partner4java - *
- */
-
public class ContextualizedDependencyLookupDemo
{ -
private static Set<ManagedComponent>
components = new HashSet<ManagedComponent>(); -
private static class MessageServiceComponent implements ManagedComponent
{ -
private MessageService
messageService; -
public void lookup(BeanFactory
beanFactory) { -
this.messageService
= (MessageService) beanFactory.getBean("service"); - }