spring aop的實現方式

2021-09-02 21:32:53 字數 3621 閱讀 4893

1.基於xml配置的spring aop

2.基於註解配置的aop

aop常用的實現方式有兩種,一種是採用宣告的方式來實現(基於xml),一種是採用註解的方式來實現(基於aspectj)

首先複習下aop中一些比較重要的概念:

advisor(通知器):其實就是切點和通知的結合 。

一、基於xml配置的spring aop

切面類:

package

com.spring.aop;

import

org.aspectj.lang.joinpoint;

import

org.aspectj.lang.proceedingjoinpoint;

public

class

aopaspect

/*** 後置返回通知:目標方法正常結束後執行的**

* 返回通知是可以訪問到目標方法的返回值的

* @param

jp *

@param

result

*/public

void

doafterreturning(joinpoint jp,string result)

/*** 最終通知:目標方法呼叫之後執行的**(無論目標方法是否出現異常均執行)

* 因為方法可能會出現異常,所以不能返回方法的返回值

* @param

jp

*/public

void

doafter(joinpoint jp)

/***

* 異常通知:目標方法丟擲異常時執行的**

* 可以訪問到異常物件

* @param

jp *

@param

ex

*/public

void

doafterthrowing(joinpoint jp,exception ex)

/*** 環繞通知:目標方法呼叫前後執行的**,可以在方法呼叫前後完成自定義的行為。

* 包圍乙個連線點(join point)的通知。它會在切入點方法執行前執行同時方法結束也會執行對應的部分。

* 主要是呼叫proceed()方法來執行切入點方法,來作為環繞通知前後方法的分水嶺。

* * 環繞通知類似於動態**的全過程:proceedingjoinpoint型別的引數可以決定是否執行目標方法。

* 而且環繞通知必須有返回值,返回值即為目標方法的返回值

* @param

pjp *

@return

* @throws

throwable

*/public object doaround(proceedingjoinpoint pjp) throws

throwable

}

<

bean

id="aspectbean"

class

="com.spring.aop.aopaspect"

/>

<

aop:config

>

<

aop:aspect

ref="aspectbean"

>

<

aop:pointcut

id="pointcut"

expression

="execution(* com.spring.service.impl.usermanagerserviceimpl..*(..))"

/>

<

aop:before

method

="dobefore"

pointcut-ref

="pointcut"

/>

<

aop:after-returning

method

="doafterreturning"

pointcut-ref

="pointcut"

returning

="result"

/>

<

aop:after

method

="doafter"

pointcut-ref

="pointcut"

/>

<

aop:around

method

="doaround"

pointcut-ref

="pointcut"

/>

<

aop:after-throwing

method

="doafterthrowing"

pointcut-ref

="pointcut"

throwing

="ex"

/>

aop:aspect

>

aop:config

>

註解

<

aop:aspectj-autoproxy

/>

@aspect

public

class

aopaspectj

/*** 在方法正常執行通過之後執行的通知叫做返回通知

* 可以返回到方法的返回值 在註解後加入returning

* @param

jp *

@param

result

*/@afterreturning(value=edp,returning="result")

public

void

doafterreturning(joinpoint jp,string result)

/*** 最終通知:目標方法呼叫之後執行的通知(無論目標方法是否出現異常均執行)

* @param

jp

*/@after(value=edp)

public

void

doafter(joinpoint jp)

/*** 環繞通知:目標方法呼叫前後執行的通知,可以在方法呼叫前後完成自定義的行為。

* @param

pjp *

@return

* @throws

throwable

*/@around(edp)

public object doaround(proceedingjoinpoint pjp) throws

throwable

/*** 在目標方法非正常執行完成, 丟擲異常的時候會走此方法

* @param

jp *

@param

ex

*/@afterthrowing(value=edp,throwing="ex")

public

void

doafterthrowing(joinpoint jp,exception ex)

}

Spring AOP實現方式

spring中4中aop區別 1.advisor類 需要依賴spring介面,spring版本比較低時可以採取這種方式 2.適合使用者從低版本spring遷移到高版本spring,重複利用以前advice類情況 3.使用配置檔案形式定義切面,比較推薦的一種方式,使用於對維護性要求較高的情況 4.as...

spring aop實現方式

詳解 在引入aop模組之後,一般來講,不用去做其他配置。spring.aop.auto屬性預設是開啟的,也就是說只要引入了aop的依賴之後,預設已經增加了 enableaspectjautoproxy org.springframework.bootgroupid spring boot start...

spring aop 的幾種實現方式

博主只用過或者了解過三種用法 1.其於 實現 2.原生的切面 3.aspectj註解驅動的切面 個人感覺第一種用起來比較簡單。也比較好理解,主要有以下的配置檔案 這樣就可以簡單的完成乙個aop 的實現 了 第二種 是基於在原始的標籤在配置的aop 就是注入到spring容器中了 網上的另一中寫法 a...