AOP思想應該怎么去理解!
我們都知道,在面試的時候,很多面試官喜歡問基礎的知識,但是基礎的內容說的都是AOP的理論,然后問到實際講解 Spring 的 AOP 的時候,卻又問的不是那么的細致,因為畢竟是面試,但是當你面試一些稍微大型的公司的時候,他們就喜歡刨根問底的詢問一些你了解的 AOP 都應用在哪些地方,又是怎么使用,今天阿粉就來說說這個 Spring 的 AOP 是怎么使用的。
AOP 思想
在軟件業(yè),AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方 式和運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術。AOP是OOP的延續(xù),是軟件開發(fā)中的一個 熱點,也是Spring框架中的一個重要內容,是函數(shù)式編程的一種衍生范型。利用AOP可以對業(yè)務邏輯 的各個部分進行隔離,從而使得業(yè)務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高 了開發(fā)的效率。
上面所說的是百度百科給出的提供信息,其實用通俗的講,他就是一個模型,也是一種思想,是用來讓自己的代碼的耦合度降低的一個思想,因為我們不管是寫代碼還是寫對應的業(yè)務邏輯,都要有一個思想,那就是高內聚,低耦合的思想,只有保持了這種思想,我們才能寫出相對優(yōu)質的代碼,而 AOP 則是要我們對這個思想體現(xiàn)出來。
那么 AOP 是什么呢?
AOP 怎么理解
AOP 俗稱,面向切面編程,我們也都知道在面試的時候,這么說是肯定沒錯的,那么接下來面試官的問題就是 AOP 一般都應用在什么地方,比如說是在自己的項目中,AOP都應用在哪些地方,是怎么應用的,然后再根據(jù)你說的應用,繼續(xù)往下問。
其實理解的話,那就是面向切面編程,就是我們對一個縱向的代碼,進行橫向的抽取,抽取出來的意義則是我們對自己的業(yè)務做一些相應的改變,但是不修改本質的內容,這就是 AOP 在我們項目中最多的意義。
AOP 的相關概念
Aspect(切面): Aspect 聲明類似于 Java 中的類聲明,在 Aspect 中會包含著一些 Pointcut 以及相應的 Advice。
Joint point(連接點):表示在程序中明確定義的點,典型的包括方法調用,對類成員的訪問以及異常處理程序塊的執(zhí)行等等,它自身還可以嵌套其它 joint point。
Pointcut(切點):表示一組 joint point,這些 joint point 或是通過邏輯關系組合起來,或是通過通配、正則表達式等方式集中起來,它定義了相應的 Advice 將要發(fā)生的地方。
Advice(增強):Advice 定義了在 Pointcut 里面定義的程序點具體要做的操作,它通過 before、after 和 around 來區(qū)別是在每個 joint point 之前、之后還是代替執(zhí)行的代碼。
Target(目標對象):織入 Advice 的目標對象。
Weaving(織入):將 Aspect 和其他對象連接起來, 并創(chuàng)建 Adviced object 的過程
上面說的這些內容全都是一些比較官方的術語,官方講解的內容就是上面這些,也是面試的時候說的最多的內容,那么 AOP 這個思想,是怎么應用的呢?
AOP 的應用
接下來阿粉整個簡單的應用來熟悉一下這個 AOP 的典型應用。
首先,引入相關依賴:
接著我們創(chuàng)建一個 Controller 和 Service 類
接著我們構建出一個切面類
然后我們做個測試,直接訪問接口看一下我們的打印日志,
這樣我們自己受用就實現(xiàn)了一個 AOP 的操作,那么 Spring 中,都有什么會應用到這個 AOP 思想呢?
AOP 思想的應用
AOP 的應用場景:
- 日志打印
- 全局異常攔截
- 統(tǒng)一返回值
- 多數(shù)據(jù)源的切換
上述的場景,都是 AOP 的典型應用,目的是什么都很清楚,在不影響代碼業(yè)務邏輯的情況下完成一些相對比較好的操作,這樣就能完美的實現(xiàn)了 AOP 思想。
至于怎么實現(xiàn)日志,阿粉都不用多說,百度上隨便都能抄一份,自己手動敲一下代碼,就完全沒毛病了,你對 AOP 還有什么不了解的呢?