- Spring快速入門
- 崔彥威 盧欣欣 王倩
- 1014字
- 2020-06-29 17:30:42
4.1 AOP基礎
在第2章中也有介紹AOP,不過側重點是AOP的原理和動態代理,本節主要介紹AOP的基礎知識點。
4.1.1 AOP的引入
這里可以把單個模塊當作一個圓柱,假如沒有AOP,那么在做日志處理的時候,我們就會在每個模塊中添加日志或者權限處理,日志或權限類似圓柱體的部分圓柱,如圖4-1所示。

圖4-1
一般大多數的日志或權限處理代碼是相同的,為了實現代碼復用,我們可能把日志處理抽離成一個新的方法,如圖4-2所示。

圖4-2
即使這樣,我們仍然必須手動插入這些方法,而且這兩個方法是強耦合的。假如此時我們不需要這個功能了,或者想換成其他功能,就必須一個個修改。
通過動態代理,可以在指定位置執行對應流程。這樣就可以將一些橫向的功能抽離出來,形成一個獨立的模塊,然后在指定位置插入這些功能。這樣的思想被稱為面向切面編程,亦即AOP,如圖4-3所示。

圖4-3
4.1.2 AOP主要概念
4.1.1小節介紹了引入AOP的好處,本小節來了解一下AOP的幾個核心概念。
(1)橫切關注點
AOP把一個業務流程分成幾部分,例如權限檢查、業務處理、日志記錄,每個部分單獨處理,然后把它們組裝成完整的業務流,每部分被稱為切面或關注點。
(2)切面
類是對物體特征的抽象,切面就是對橫切關注點的抽象。可以將每部分抽象成一疊紙一樣,一層一層的,那么每張紙都是一個切面。
(3)連接點
因為Spring只支持方法類型的連接點,所以在Spring中連接點指的就是被攔截到的方法,實際上連接點還可以是字段或者構造器。其實,Spring只支持方法類型的連接點包含字段和構造器。因為字段通過get、set方法得到,構造器其實也是方法。Spring只支持方法類型的連接點和連接點是字段或者構造器是包含關系。
(4)切入點
對連接點進行攔截的定義。連接點可以有很多,但并不一定每個連接點都進行操作,比如蓮藕,藕段與藕段之間是有連接點的,但不一定都切開。
(5)通知
通知指的就是指攔截到連接點之后要執行的代碼,分為前置、后置、異常、最終、環繞通知5類。這個有點類似于把藕段與藕段斷開之后要做的事情,是往里面加蜂蜜還是做什么。
(6)目標對象
代理的目標對象,就是動態代理的target,在實際操作中一般會先實現AOP的接口,然后配置這些接口作用到哪些對象上,被作用的對象就是目標對象。
(7)織入
切面是獨立的,目標對象也是獨立的,它們是不耦合的,那它怎么把切面放到目標對象中呢?這時就需要進行織入操作,就類似這種的,怎么把target和打印日志聯系到一起呢?使用動態代理。在Spring中,aop.framework.ProxyFactory用作織入器,進行橫切邏輯的織入。
(8)引入
不改代碼的同時,為類動態地添加方法或字段。
- Modular Programming with Python
- 零基礎學C++程序設計
- OpenCV 3和Qt5計算機視覺應用開發
- 新手學Visual C# 2008程序設計
- C# 8.0核心技術指南(原書第8版)
- RISC-V體系結構編程與實踐(第2版)
- Yii Project Blueprints
- Learning Unreal Engine Android Game Development
- Oracle GoldenGate 12c Implementer's Guide
- Creating Data Stories with Tableau Public
- .NET 4.5 Parallel Extensions Cookbook
- 深入解析Java編譯器:源碼剖析與實例詳解
- WordPress Search Engine Optimization(Second Edition)
- Web開發的平民英雄:PHP+MySQL
- 軟件設計模式(Java版)