Spring 框架的 AOP

2021-08-06 16:29 更新

Spring 框架的 AOP

Spring 框架的一個關(guān)鍵組件是面向切面的編程(AOP)框架。面向切面的編程需要把程序邏輯分解成不同的部分稱為所謂的關(guān)注點(diǎn)??缫粋€應(yīng)用程序的多個點(diǎn)的功能被稱為橫切關(guān)注點(diǎn),這些橫切關(guān)注點(diǎn)在概念上獨(dú)立于應(yīng)用程序的業(yè)務(wù)邏輯。在軟件開發(fā)過程中有各種各樣的很好的切面的例子,如日志記錄、審計(jì)、聲明式事務(wù)、安全性和緩存等。

在 OOP 中,關(guān)鍵單元模塊度是類,而在 AOP 中單元模塊度是切面。依賴注入幫助你對應(yīng)用程序?qū)ο笙嗷ソ怦詈?,AOP 可以幫助你從它們所影響的對象中對橫切關(guān)注點(diǎn)解耦。AOP 像是編程語言的觸發(fā)物,如 Perl,.NET,Java 或者其他語言。

Spring AOP 模塊提供攔截器來攔截一個應(yīng)用程序,例如,當(dāng)執(zhí)行一個方法時,你可以在方法執(zhí)行之前或之后添加額外的功能。

AOP 術(shù)語

在我們開始使用 AOP 工作之前,讓我們熟悉一下 AOP 概念和術(shù)語。這些術(shù)語并不特定于 Spring,而是與 AOP 有關(guān)的。

項(xiàng)描述
Aspect一個模塊具有一組提供橫切需求的 APIs。例如,一個日志模塊為了記錄日志將被 AOP 方面調(diào)用。應(yīng)用程序可以擁有任意數(shù)量的方面,這取決于需求。
Join point在你的應(yīng)用程序中它代表一個點(diǎn),你可以在插件 AOP 方面。你也能說,它是在實(shí)際的應(yīng)用程序中,其中一個操作將使用 Spring AOP 框架。
Advice這是實(shí)際行動之前或之后執(zhí)行的方法。這是在程序執(zhí)行期間通過 Spring AOP 框架實(shí)際被調(diào)用的代碼。
Pointcut這是一組一個或多個連接點(diǎn),通知應(yīng)該被執(zhí)行。你可以使用表達(dá)式或模式指定切入點(diǎn)正如我們將在 AOP 的例子中看到的。
Introduction引用允許你添加新方法或?qū)傩缘浆F(xiàn)有的類中。
Target object被一個或者多個方面所通知的對象,這個對象永遠(yuǎn)是一個被代理對象。也稱為被通知對象。
WeavingWeaving 把方面連接到其它的應(yīng)用程序類型或者對象上,并創(chuàng)建一個被通知的對象。這些可以在編譯時,類加載時和運(yùn)行時完成。

通知的類型

Spring 方面可以使用下面提到的五種通知工作:

通知描述
前置通知在一個方法執(zhí)行之前,執(zhí)行通知。
后置通知在一個方法執(zhí)行之后,不考慮其結(jié)果,執(zhí)行通知。
返回后通知在一個方法執(zhí)行之后,只有在方法成功完成時,才能執(zhí)行通知。
拋出異常后通知在一個方法執(zhí)行之后,只有在方法退出拋出異常時,才能執(zhí)行通知。
環(huán)繞通知在建議方法調(diào)用之前和之后,執(zhí)行通知。

實(shí)現(xiàn)自定義方面

Spring 支持 @AspectJ annotation style 的方法和基于模式的方法來實(shí)現(xiàn)自定義方面。這兩種方法已經(jīng)在下面兩個子節(jié)進(jìn)行了詳細(xì)解釋。

方法描述
XML Schema based方面是使用常規(guī)類以及基于配置的 XML 來實(shí)現(xiàn)的。
@AspectJ based@AspectJ 引用一種聲明方面的風(fēng)格作為帶有 Java 5 注釋的常規(guī) Java 類注釋。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號