鍍金池/ 教程/ Java/ Spring 框架的 AOP
Spring MVC Hello World 例子
事務(wù)管理
JDBC 框架概述
MVC 框架教程
Spring 自動(dòng)裝配 ‘byName’
Spring 中的自定義事件
Spring 編程式事務(wù)管理
環(huán)境設(shè)置
概述
Spring 中 SQL 的存儲(chǔ)過程
體系結(jié)構(gòu)
Spring 中的事件處理
Spring 靜態(tài)頁面例子
基于注解的配置
依賴注入
Spring 自動(dòng)裝配 ‘byType’
Spring 由構(gòu)造函數(shù)自動(dòng)裝配
Spring @Qualifier 注釋
Spring ApplicationContext 容器
Spring 中基于 AOP 的 XML架構(gòu)
Bean 的生命周期
IoC 容器
注入內(nèi)部 Beans
Spring JDBC 示例
Spring 基于構(gòu)造函數(shù)的依賴注入
Spring @Required 注釋
Hello World 實(shí)例
Bean 定義
Sping 的 BeanFactory 容器
Spring 頁面重定向例子
Bean 定義繼承
Spring 中基于 AOP 的 @AspectJ
注入集合
Beans 自動(dòng)裝配
Spring 異常處理例子
Spring 聲明式事務(wù)管理
Spring @Autowired 注釋
基于 Java 的配置
Spring MVC 表單處理例子
Spring——Bean 后置處理器
使用 Log4J 記錄日志
Spring 基于設(shè)值函數(shù)的依賴注入
Spring JSR-250 注釋
Bean 的作用域
Spring 框架的 AOP

Spring 框架的 AOP

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

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

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

AOP 術(shù)語

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

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

通知的類型

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

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

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

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

方法 描述
XML Schema based 方面是使用常規(guī)類以及基于配置的 XML 來實(shí)現(xiàn)的。
@AspectJ based @AspectJ 引用一種聲明方面的風(fēng)格作為帶有 Java 5 注釋的常規(guī) Java 類注釋。