1. 程式人生 > >Spring框架中IOC控制反轉和DI依賴注入區別

Spring框架中IOC控制反轉和DI依賴注入區別

IOC控制反轉:說的是建立物件例項的控制權從程式碼控制剝離到IOC容器控制,實際就是你在xml檔案控制,側重於原理。

DI依賴注入:說的是建立物件例項時,為這個物件注入屬性值或其它物件例項,側重於實現。
它們是spring核心思想的不同方面的描述。

DI 和 IOC
DI和IOC是差不多的概念。
一個重要特徵是介面依賴,是把物件關係推遲到執行時去確定.

DI是一個初始化例項的過程,分為三種

1.setter based

2.constructor based

3.interface based,

在spring 中就是應用前兩種;但又不僅僅是初始化例項,而且是運用介面的概念去實現這種注入依賴。靜態地看,只是依賴一個介面,但實際執行起來,是依賴一個實現了該 介面的具體類。

IOC就是面向介面程式設計的應用
1.一個通常的做法(非面向介面程式設計的方法),物件A依賴物件B,B會作為A的屬性,可以理解為A直接控制B;
2.IOC的做法,物件A依賴於介面C,而不直接依賴於實現了介面C的B,也就是A不能直接控制是哪個具體實現了C的B去做相應的事情,而是由我們控制可以由哪個實現了介面C的B去處理,也就是控制反過來了,是由B來決定了,而不是由A,實現就是面向介面程式設計。

AOP 

AOP是動態代理的應用,將具體業務和相應的其它方面(比如日誌,許可權之類的)劃分開來,業務不會知道還有沒有其它的功能來輔助,需要的話我就給他加上一個配置就可以,而不用去修改業務程式碼。

原先是這個樣子 {
       //日誌
       //許可權
       //業務程式碼

      現在

      //業務程式碼

而許可權和日誌則寫在其它的類advice中,只要在配置中說明在呼叫業務方法時(或前,或後,或別的),呼叫一下advice就OK了。很容易把一個方面,比如許可權或日誌從業務程式碼中剝離出來。

在SPRING中,實現AOP的流程如下:
1.定義業務介面
2.定義業務實現類
3.定義interceptor注入類
4.配置Bean,設定class為proxyFactoryBean
    設定其三個屬性1.)proxyInterfaces為1
           2.)interceptorNames為3
           3.)target為2