Spring AOP 是什麼?

聲明:請勿直接抄襲,翻譯不易,轉載請註明 http://www.javashuo.com/article/p-okwkfoys-mv.html ,謝謝。html


雖然 AOP 不常常被討論,可是它在 Spring 中有着普遍的應用。對你來講,也許是時候去熟悉 AOP 並讓它爲你所用了。

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

最近,我看到不少項目都在使用 Spring Boot 和其餘優秀框架開發的最新技術。一方面,這聽起來是很棒的,可是另外一方面,我常常看到不少開發人員並無充分利用這些新技術的所有有點。web

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

spring

什麼是面向切面編程


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

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

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

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

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

模塊化

使用 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?

歡迎掃碼關注個人公衆號「蝸牛永動機」,回覆 1024 免費獲取 5G 編程學習資源~

在這裏插入圖片描述