Spring AOP 是什麼?

聲明:請勿直接抄襲,翻譯不易,轉載請註明 https://blog.csdn.net/Big_Rotor/article/details/88765984 ,謝謝。


雖然 AOP 不經常被討論,但是它在 Spring 中有着廣泛的應用。對你來說,也許是時候去熟悉 AOP 並讓它爲你所用了。

你瞭解 Spring AOP 嗎?你有在你目前的 Spring Boot 項目中使用它嗎?如果沒有,這篇文章就是爲你準備的!

最近,我看到很多項目都在使用 Spring Boot 和其他優秀框架開發的最新技術。一方面,這聽起來是很棒的,但是另一方面,我經常看到很多開發人員並沒有充分利用這些新技術的全部有點。

我認爲主要是因爲多數的書和文檔都過於學術化並且晦澀難懂。所以這就是爲什麼我決定談一談我對面向切面編程(aspect-oriented programming)的一點理解。

什麼是面向切面編程


面向切面編程是一種編程範式,試圖解決`橫切關注點(cross-cutting concerns)`的問題。面向切面編程(AOP)是對面向對象編程(OOP)的一種補充,它提供了一種不同的方式去思考程序的結構。

在 OOP 中最小的單元是類(class),而在 AOP 中最小的單元是切面(aspect)

更通俗地講就是,AOP 有助於我們將不同但是有必要的重複性代碼重構爲不同的模塊。這麼做的好處是,我們可以將這些重複性代碼集中管理起來複用,而不是每次都要重複寫一遍。

這種方法的好處是,代碼將會變得更易於維護,從而將業務邏輯從雜亂的代碼中脫離出來,專注於業務邏輯代碼的開發。我們將這些不同的功能劃分到不同的切面中。

一個切面是對雜亂地散落在各個類中的橫切關注點的模塊化。比如,集中日誌記錄事務管理就是最好的例子。

使用 AOP 簡化代碼


讓我們看看如下的示例代碼。

圖一
在這裏,你會意識到有些代碼是於業務邏輯無關的。所以,我們應該要將它們抽離出來,放到其他地方,將業務邏輯單獨分出來處理。

在這裏插入圖片描述

AOP 如何大規模運作


如果你的系統中有些包和類中沒有使用 AOP,例如跟蹤,事務和異常處理,那麼就必須在每個類和方法中去實現它們。

這麼做的結果就是會導致如下兩個問題:

  • 代碼糾纏(Code tangling) 每個類和方法中都包含代碼追蹤(tracing),事務以及異常處理——甚至是業務邏輯。在一個這樣的方法中,很難分清代碼中實際做的是什麼處理。
  • 代碼交叉(Code scattering) 諸如事務之類的切面分散在代碼各個角落中,而不是在系統中特定的地方實現。
    在這裏插入圖片描述

使用 AOP 能夠幫助你解決這樣的問題。所以,在這裏 AOP 所做的就是將所有散落各處的事務代碼集中到一個事務切面中。然後,將所有的追蹤代碼(tracing code)集中到一個切面中。最後,將異常處理集中到一個切面中。

至此,就可以是實現業務邏輯和其他切面之間的分離。
在這裏插入圖片描述

橫切關注點


AOP 中一個最重要的概念是橫`切關注點(cross-cutting concerns)`。在上面,我舉了 AOP 的幾個例子`追蹤,異常處理和事務(tracing, exception handling, and transactions)`,這些全都是橫切關注點。一些類和方法必須實現它們。

在經典的面向對象編程中,無法將它們集中到一個地方統一實現,因此無法避免代碼糾纏和胡亂交叉。

而面向切面編程則允許你在一個集中的地方實現橫切關注點。所以,如果使用 AOP,那麼將會允許你先實現你的業務邏輯,然後再統一處理橫切關注點的問題。

通過這種方式,你可以編寫基礎結構並決定是否要將事務或日誌記錄添加到代碼中。因此,你可以創建自己的中間件。然後,使用 Spring AOP 將這些切面添加到程序中,以便程序處在在運行時狀態的時候,實際地去執行這些切面和主要的業務邏輯。


什麼是 Spring AOP?


如果你看過我的文章《What is Spring framework in java?》,那麼你一定知道 Spring AOP 是 Spring 的核心模塊之一。

Spring AOP 通過消除代碼糾纏和交叉問題,在我們的項目中支持面向切面的模塊化。將 Spring AOP 庫添加到我們的項目中,你將會開始體驗到使用它的一些組件所帶來的好處。

這些組件如 註解(annotation)建言(advice)連接點(join points)、以及切點(point cuts)

通常,你會使用 AOP 來實現企業級的功能開發,從而使 Spring 框架更加實用。

AOP 允許你準確地將你所定義的切面集中到特定的地方。因此,你將獲得可配置的中間件。如果你想要更加深入地瞭解 Spring AOP,請繼續關注接下來要發表的文章或這個網站

總結


在這篇文章中,我嘗試去說清楚面向切面編程的概念並介紹了它與 Spring 框架之間的關係。在我的下一篇文章中,我將深入探討 Spring AOP 的庫,以及它的核心是什麼,它是如何使用的,嚮往能夠對你有所幫助。請在評論中留下您的想法,不要忘記分享!

原文鏈接     What Is Spring AOP?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章