參與者:應用程序和spring
正向:如今的程序方向,A對象要使用B對象,如今是A裏面直接建立B的實例,而後調用。
publc class A{
void t1(){
new B().t2();
}
}
public class B{
void t2();spring
簡而言之,就是程序須要什麼。就由程序主動去獲取須要的資源,這個方向就是正向。
容器是用來建立和裝配對象,並管理對象生命週期的。對於應用程序而言,就是被動實例化和被動接受依賴了。
裝配:
在spring容器內拼湊bean叫做裝配。裝配bean的時候,你是在告訴容器,
須要哪些bean,以及容器如何使用依賴注入將它們配合在一塊兒。
IOC/DI思想:
1把程序之間的依賴關係去掉。
2把程序對象設置到IOC/DI容器的配置中,做爲Bean
3 由IOC和DI容器來管理Bean的建立,實例化。
4 由IOC/DI容器把Bean之間的關係注入到須要這些關係的對象裏面。
簡而言之就是對象之間的依賴,所有去掉,而後由IOC/DI容器管理對象和對象之間的依賴關係。
功能:實現了對象之間的鬆散耦。框架
1誰控制誰?
IOC/DI容器控制應用程序
2控制什麼
a控制對象自己的建立和實例化和裝配
b控制對象之間的依賴關係
3爲什麼叫反轉?
由於應用程序不能主動的獲取外部資源 ,而是被動等待IOC容器給他注入他所須要的資源。因此稱爲反轉。測試
4:哪些方面反轉了?
(1)建立對象的地方,spring建立
(2)程序得到資源(好比依賴的其餘對象,也就是依賴關係)的方式反了。設計
5 爲什麼須要反轉?
(1)引入了容器事後,整個體系更爲鬆散,並且管理更有序。
(2)類之間的依賴關係真正實現了鬆散耦合,使得開發測試修改等變得容易。
IOC/DI並無幫咱們實現任何的業務功能,本來該有應用實現的功能,仍是有應用自身完成。對象
7:什麼是依賴
依賴(動詞)於注入依賴(名詞)關係
8 誰依賴於誰?
應用程序依賴於IOD/DI容器。接口
9爲何須要依賴?
由於反轉了事後,應用程序須要的資源都在容器裏,因此要依賴容器。生命週期
10 依賴什麼東西?
應用程序依賴於IOD/DI容器。依賴IOC/DI容器爲它注入所須要的資源。(好比:依賴關係)
簡寫就是:依賴於注入依賴(名詞)關係。應用程序依賴IOC注入依賴關係。資源
11 誰注入誰
IOC/DI容器 注入與應用程序
12注入什麼東西?
注入應用程序須要的外部資源,好比依賴關係,常量值什麼的開發
13 爲什麼注入?
由於程序要正常運行,須要這些資源。io
14 依賴注入和控制反轉是同一個概念嗎?
不是同一個概念
其實描述的是同一件事,可是是從不一樣的角度在說。
控制反轉:從IOC/DI的容器來講。容器反過來控制應用程序
依賴注入:是應用程序的角度來講。
15
控制反轉的描述:IOC/DI容器反過來控制應用程序,控制應用程序所須要的外部資源,好比依賴關係
依賴注入的描述:應用程序依賴IOC/DI容器,依賴它(容器)注入所須要的外部資源。
16 IOC和DI 是什麼?
IOC:是一種使用IOC/DI容器反過來控制應用程序,控制應用程序所須要的外部資源,這是一種程序開發思想
ID:應用程序依賴容器來注入所需的外部資源,是一種開發思想
17能作什麼
鬆散對象的耦合。
使用spring,spring裏有實現好的IOC/DI的容器,這樣就不用本身去實現
18 怎麼作?
能夠本身實現,
19 用在什麼地方?
凡是程序裏面須要使用到外部資源的狀況,均可以考慮使用IOC/DI容器
比方說 工廠類,如今就不須要啦。
20強調一下外部資源的概念
對一個類來說,所謂外部資源,就是指在本身類的內部,不能獲得或實現的東西,比方說在類裏讀取一個配置文件
,那麼這個配置文件就至關於這個類的外部資源。
又好比:A類裏面要調用B類的方法,須要在A類獲取B類的對象,那麼對於A來說,B就是外部資源。
21 什麼是IOC容器
就是實習IOC思想,並提供對象建立,對象裝配以及對象生命週期管理的軟件就是IOC容器。
IOC理解:
1 應用程序無需主動new對象,而是描述對象應該如何被建立,IOC容器幫你建立,即被動實例化
2 應用程序不須要主動裝配對象之間的關係,而是描述須要哪一個服務,IOC容器會幫你裝配,被動接受裝配。
3 主動變被動。如:別給咱們打電話,咱們會打給你。
4 應用程序不知道依賴的具體實現,只知道須要提供某類的服務對象(面向接口):並鬆散耦合,一個對象
應當對其餘對象儘量少的瞭解,不和陌生人說話。
5 減小類與類之間依賴的設計原則
主動變被動:
之前是應用程序是主動,如今變成了被動。可是他要告訴IOC容器須要什麼資源,而後容器講資源注入程序。
應用程序永遠是被動的。
1 ioc和DI等於工廠嗎?
不等,思想源於工廠,可是高於工廠,IOC/DI的思想是 DI+容器
2跟之前的方式有什麼不同
反轉。去掉了工廠
使用IOC/DI容器開發須要改變的思路: 1應用程序不主動建立對象,可是要描述建立他們的方式。 2在程序代碼中不直接進行服務的裝配,可是要描述哪個組件須要那一項服務,由容器負責將這些裝配在一塊兒。 也就是說:全部的組件都是被動的,組件初始化和裝配都由容器負責,應用程序知識在獲取相應的組建後,實現 影響的功能便可。 重點: IOC/DI 是思想,不是純實現技術。IOD是框架共性,只是控制權轉轉移,轉移到框架,因此不能由於實現了IOC就叫IOC容器。 除了實現IOC外,還要具備DI的功能才叫IOC容器,由於容器除了負責建立並裝配組件關係,還須要管理組件的 生命週期。