ioc inversion of control
思想為反轉資源獲取的方向 傳統的資源查詢方式要求元件向容器發起請求查詢資源,作為回應,容器適時的返回資源。而應用了ioc之後,則是容器主動地將資源推送給它管理的元件,元件所要做的僅是選擇一種合適的方式來接受資源。這種行為也被稱為查詢的被動形式。
di dependency injection ioc的另一種表述方式:即元件以一些預先定義好的方式(如setter方法)接受來自如容器的資源注入。
乙個例子:
class a
class b
}
需求:從容器中獲取b物件,並使b物件的a屬性被賦值為容器a物件的引用
傳統容器 a、b之間要構造出依賴關係需要手動創造物件
a a =
geta()
;b b =
getb()
;b.seta
(a);
ioc容器
b b =
getb()
;
不需要手動注入
ioc發展過程
乙個場景:要交乙個實驗報告,實驗報告有兩種形式,pdf和html,它們實現了同乙個介面。
當我需要生成乙份實驗報告的時候,我需要知道pdf格式、html格式和介面這三個類的所有實現細節,耦合度高。(不同格式的構造方法、使用方法、屬性等等都可能不同,所以都需要具體實現)(是不是不使用介面就降低了乙個耦合度呢 分離介面和實現以便**復用)
同樣的需求。採用工廠設計模式,不再關心不同格式的具體實現,將它們的建立都放到工廠方法中,然後需要建立時呼叫工廠方法即可。耦合度降低。
同樣的需求。採用反轉控制,不再需要工廠。容器提供所需要的物件。觀察類圖中的箭頭方向可以看到和工廠設計模式的區別,工廠設計模式是主動的,需要什麼找工廠要。反轉控制則是被動的由容器注入。
類圖如下
Spring學習(2) 快速上手Spring
匯入jar包 org.springframeworkgroupid spring webmvcartifactid 5.2.6.releaseversion dependency 編寫 編寫乙個hello實體類 public class hello public void setstr string...
spring學習筆記 2
spring對aop的支援 1 如果目標物件實現了介面,預設情況下會採用jdk的動態 實現aop 2 如果目標物件實現了介面,可以強制使用cglib實現aop 3 如果目標物件沒有實現了介面,必須採用cglib庫,spring會自動在jdk動態 和cglib之間轉換 如何強制使用cglib實現aop...
Spring學習筆記2
一 什麼是aop 面向切面程式設計,通過預編譯方式和執行期動態 實現程式功能的統一維護的一種技術。在不影響原來功能 的基礎上,使用動態 加入自己需要的一些功能 比如許可權的驗證,事務的控制,日誌的記錄等等 移除之後,並不影響原來的功能 面向切面程式設計是通過動態 實現的,是對物件導向思想的補充。可以...