IOC是使用了反射的技術來動態的生成對象
工廠模式的對象生成是提前在工廠類中定死的
IOC更加靈活
IoC——Inversion of Control 控制反轉
DI——Dependency Injection 依賴注入
1:如何理解IoC/DI
要想理解上面兩個概念,就必須搞清楚如下的問題:
- 參與者都有誰?
- 依賴:誰依賴於誰?為什么需要依賴?
- 注入:誰注入於誰?到底注入什么?
- 控制反轉:誰控制誰?控制什么?為何叫反轉(有反轉就應該有正轉了)?
- 依賴注入和控制反轉是同一概念嗎?
下面就來簡要的回答一下上述問題,把這些問題搞明白了,IoC/DI也就明白了。
(1)參與者都有誰:
一般有三方參與者,一個是某個對象;一個是IoC/DI的容器;另一個是某個對象的外部資源。
又要名詞解釋一下,某個對象指的就是任意的、普通的Java對象; IoC/DI的容器簡單點說就是指用來實現IoC/DI功能的一個框架程序;對象的外部資源指的就是對象需要的,但是是從對象外部獲取的,都統稱資源,比如:對象需要的其它對象、或者是對象需要的文件資源等等。
(2)誰依賴於誰:
當然是某個對象依賴於IoC/DI的容器
(3)為什么需要依賴:
對象需要IoC/DI的容器來提供對象需要的外部資源
(4)誰注入於誰:
很明顯是IoC/DI的容器 注入 某個對象
(5)到底注入什么:
就是注入某個對象所需要的外部資源
(6)誰控制誰:
當然是IoC/DI的容器來控制對象了
(7)控制什么:
主要是控制對象實例的創建
(8)為何叫反轉:
反轉是相對於正向而言的,那么什么算是正向的呢?考慮一下常規情況下的應用程序,如果要在A里面使用C,你會怎么做呢?當然是直接去創建C的對象,也就是說,是在A類中主動去獲取所需要的外部資源C,這種情況被稱為正向的。那么什么是反向呢?就是A類不再主動去獲取C,而是被動等待,等待IoC/DI的容器獲取一個C的實例,然后反向的注入到A類中。