1.基於xml配置的spring aop
2.基於註解配置的aop
aop常用的實現方式有兩種,一種是採用宣告的方式來實現(基於xml),一種是採用註解的方式來實現(基於aspectj)。
首先複習下aop中一些比較重要的概念:
advisor(通知器):其實就是切點和通知的結合 。
一、基於xml配置的spring aop
切面類:
packagecom.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
/>
@aspectpublic
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...