Spring學習 2 IOC DI概述

2021-09-17 23:34:35 字數 1172 閱讀 1917

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 面向切面程式設計,通過預編譯方式和執行期動態 實現程式功能的統一維護的一種技術。在不影響原來功能 的基礎上,使用動態 加入自己需要的一些功能 比如許可權的驗證,事務的控制,日誌的記錄等等 移除之後,並不影響原來的功能 面向切面程式設計是通過動態 實現的,是對物件導向思想的補充。可以...