-
1 # 圖靈科技論
-
2 # 程式猿WIOC
1、什麼是 IOC/DI ?
① IOC(Inversion of Control) 控制反轉:所謂控制反轉,就是把原先我們程式碼裡需要實現的物件建立、依賴的程式碼,反轉給容器來來幫忙實現。那麼必然的我們需要建立一個容器,同時需要一種描述來讓容器知道需要建立的物件與物件的關係。這種描述最具體表現就是我們的可配置檔案。
② DI(Dependency Injection) 依賴注入: 就是指物件時被動接受依賴類而不是主動去找,歡聚話說 就是指物件不是從容器中查詢它依賴的類,而是在容器例項化物件的時候主動將它依賴的類注入給它
2、如何理解IOC/DI
想要理解上面的概念,就必須搞清楚如下的問題:
① 參與者都是誰?
② 依賴: 誰依賴誰?為什麼需要依賴?
④ 控制反轉:誰控制誰?控制什麼?為何叫反轉?
⑤ 依賴注入和控制反轉是同一概念嗎?
下面我們來回答上面的問題:
(1) 參與者都有誰: 一個物件,IOC容器,被依賴的物件
(2) 誰依賴誰? 某個物件依賴IOC容器
(3) 為什麼需要依賴: 物件需要IOC容器給其注入其需要的資源
(4) 誰注入誰?IOC容器注入某個物件
(5) 誰控制誰?IOC 容器 來控制物件的生命週期
(6) 控制什麼?控制物件的建立、初始化、銷燬
(7) 為何叫反轉?
如果我們平常寫一個程式,如果A類中需要C物件,那麼我們會直接new一個C物件,A類主動的去獲取C物件,這種情況叫做正向的。
什麼叫反向呢?就是A類不主動去建立C,而是等IOC容器給A注入C。
3、控制反轉和 依賴注入是同一概念嗎?
依賴注入和控制反轉是對同一件事情的不同描述。
依賴注入是從程式方面講的: 應用程式依賴容器給我注入其所需要的資源。
控制反轉: 容器控制應用程式,由容器反向地嚮應用程式注入其所需要的資源。
AOP1、概念
面向切面程式設計,即AOP,是一種程式設計思想,它允許程式設計師對橫切關注點或橫切典型的職責分界線 的行為(例如日誌和事務管理)進行模組化。AOP的核心構造是方面(切面),它將那些影響多個類的行為封裝到可重用 的模組中。
AOP的功能完全繼承到了Spring事務管理、日誌和其他各種特性的上下文中。
2、核心概念
① 橫切關注點(對哪些方法進行切入):對哪些方法進行攔截,攔截後怎麼處理,這些關注點稱為橫切關注點
②切面(Aspect) 把原來揉碎的業務邏輯中的非業務程式碼抽取出來,把功能相同的放在一個類中形成一個切面
類是對物體特徵的抽象,切面是對橫切關注點的抽象。
④切入點(poincut):對連線點進行攔截的定義
⑤通知(Advice)
所謂通知指的就是指攔截到連線點之後要執行的程式碼,通知分為前置、後置、異常、最終、環繞通知
⑥ 目標物件:代理的目標物件
⑦織入(weave)) :將切面應用到目標物件並導致代理物件建立的過程
3、常用場景
① Authentication許可權認證
② Logging日誌
④ Lazy Loading 懶載入
⑤ Context Process上下文處理
⑥ Error Handler錯誤跟蹤(異常捕獲機制)
⑦ Cache快取
4. Spring AOP 底層是怎麼實現的?
最終使用動態代理: JDK動態代理和CGlib動態代理
5、我們學Spring AOP 能需要什麼?
自定義元件: 業務操作物件,可能要經過一系列的校驗操作
1、宣告一個一個校驗介面,定義校驗規則
1.1 寫一個抽象類(把公共的校驗規則寫在這裡)
2、有多少種校驗規則類,就實現該介面
① 校驗規則有先後順序,定義order介面或者註解都可以,列舉
② 業務型別--匹配我的規則 A業務只要123 B業務需要234
@Autowired
private Map<String,IDepence> depends;
Spring會自動把Idepence的實現類注入進去
④建立一個規則鏈物件
回覆列表
AOP、IOC在Spring中屬於心臟級別,這兩個概念很抽象,我們可以從下圖先大致瞭解一下這兩者關係。
1、概念:
IOC:控制反轉:將建立物件以及維護物件之間的關係由程式碼交給了spring容器進行管理,也就是建立物件的方式反轉了,交由spring容器進行管理。
DI:依賴注入:實現IOC思想的核心,目的是建立以及維護物件之間的關係(將依賴的物件注入到目標物件中即可)
AOP:面向切面程式設計,透過預編譯的方式和執行時使用動態代理使功能統一維護的一種技術(spring容器中管理物件生成代理物件的),底層是基於代理技術實現的。使用AOP技術可以將業務邏輯的各部分分離開,降低耦合,提高效率。解決了OOP中不能解決的問題,一定意義上說是OOP的延續和拓展。
2、AOP使用場景:
AOP用來封裝橫切關注點,具體可以在下面的場景中使用:
Authentication 許可權
Caching 快取
Context passing 內容傳遞
Error handling 錯誤處理
Lazy loading 懶載入
Debugging 除錯
logging, tracing, profiling and monitoring 記錄跟蹤 最佳化 校準
Performance optimization 效能最佳化
Persistence 持久化
Resource pooling 資源池
Synchronization 同步
Transactions 事務
3、Spring AOP常用元件:
以上純屬個人淺薄理解,如有疑問可隨時交流,忘樓主在平時多看下原始碼,實際操作比概念更有趣。