一、定義
IOC:反轉資源獲取的方向。(傳統的資源查找方式要求組件向容器發起請求查找資源作爲迴應,容器適時的返回資源,應用了IOC後則是,容器主動地將資源推送給它所管理的組件,組件所要做的僅是選擇一種合適的方式來接受資源。“查找的被動形式”)
DI:IOC的另一種表述方式。組件以一些預先定義好的方式接受來自如容器的資源注入。
二、例子
舉個簡單的例子:
有兩個類:
class A{}
class B{
private A a;
public void setA(A a){
this.a = a;
}
}
對於普通容器:
A a = getA();
B b = getB();
b.setA(a);
對於IOC容器:
B b = getB();
三、IOC的前生今世
(1)分離接口與實現
這樣的話Service層就要知道前面三個類,耦合度是很高的。
【相當於原始社會我們需要打把錘子的時候,要知道知道做錘頭跟錘把的步驟,才能做出一把錘頭】
(2)採用工廠設計模式:
耦合度降低了,知道了工廠跟接口就好了,但是代碼就跟複雜了。有利於代碼的擴展,分工明確了。
【相當於手工時代,知道接口跟工廠找工廠幫忙打一把就好,至於做法的步驟就交給工廠好了】
(3)採用反轉控制
【高級社會,只要在門口放一個小框就自動給你一個錘頭】
因此要顛覆以前的new啊什麼的,而是改成依賴注入!!!
依賴注入的方式:
1、構造器注入
2、屬性注入set注入
3、註解注入
4、接口注入
-------------
DI能夠讓相互協作的軟件組件保持鬆散耦合,而面向切面編程(AOP)允許你把遍佈應用各處的功能分離出來形成可重用的組件。