spring aop 附帶測試例項

2021-08-31 16:58:54 字數 2074 閱讀 6071

•[color=blue]切面(aspect)[/color] :

•[color=blue]連線點(joinpoint) [/color]:

程式執行過程中的某一行為,例如,aserviceimpl.bara()的呼叫或者bserviceimpl.barb(string _msg, int _type)丟擲異常等行為。

•[color=blue]通知(advice)[/color] :

「切面」對於某個「連線點」所產生的動作,例如,testaspect中對com.spring.service包下所有類的方法進行日誌記錄的動作就是乙個advice。其中,乙個「切面」可以包含多個「advice」,例如testaspect

•[color=blue]切入點(pointcut)[/color] :

匹配連線點的斷言,在aop中通知和乙個切入點表示式關聯。例如,testaspect中的所有通知所關注的連線點,都由切入點表示式execution(* com.spring.service.*.*(..))來決定

•[color=blue]目標物件(target object) [/color]:

被乙個或者多個切面所通知的物件。例如,aservcieimpl和bserviceimpl,當然在實際執行時,spring aop採用**實現,實際aop操作的是targetobject的**物件。

•[color=blue]aop**(aop proxy)[/color]

在spring aop中有兩種**方式,jdk動態**和cglib**。預設情況下,targetobject實現了介面時,則採用jdk動態**,例如,aserviceimpl;反之,採用cglib**,例如,bserviceimpl。強制使用cglib**需要將 的 proxy-target-class 屬性設為true

通知(advice)型別

•[color=blue]丟擲異常後通知(after throwing advice) [/color]:

切入點表示式

•通常情況下,表示式中使用」execution「就可以滿足大部分的要求。表示式格式如下:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)

modifiers-pattern:方法的操作許可權

ret-type-pattern:返回值

declaring-type-pattern:方法所在的包

name-pattern:方法名

parm-pattern:引數名

throws-pattern:異常

其中,除ret-type-pattern和name-pattern之外,其他都是可選的。上例中,execution(* com.spring.service.*.*(..))表示com.spring.service包下,返回值為任意型別;方法名任意;引數不作限制的所有方法。

•通知引數

可以通過args來繫結引數,這樣就可以在通知(advice)中訪問具體引數了。例如,配置如下

testaspect的doafter方法中就可以訪問msg引數,但這樣以來aservice中的bara()和bserviceimpl中的barb()就不再是連線點,因為execution(* com.spring.service.*.*(string,..))只配置第乙個引數為string型別的方法。其中,doafter方法定義如下:

public void doafter(joinpoint jp,string msg)

訪問當前的連線點

任何通知(advice)方法可以將第乙個引數定義為 org.aspectj.lang.joinpoint 型別。joinpoint 介面提供了一系列有用的方法, 比如 getargs() (返回方法引數)、getthis() (返回**物件)、gettarget() (返回目標)、getsignature() (返回正在被通知的方法相關資訊)和 tostring() (列印出正在被通知的方法的有用資訊。

spring aop 簡單例項

1。匯入spring 所需要的包 2 web.xml新增 註解方式 定義乙個介面 public inte ce springdao 實現類public class springtest implements springdao override public void deletestudent t...

spring aop 切面測試

spring 配置 aop 切面類 package com.changhang.urgoo.impl.utils import com.changhang.urgoo.impl.entity.result.mesresult import com.changhang.urgoo.impl.entit...

Mysql之case語句(附帶例項)

這段時間,做專案做累了,好不容易有點個人的學習時間,利用這個小時,總結一下,最近做統計的時候常用的case語句吧。結構 case when then end 1.判斷的同時改變其值 第二種寫法 select callernumber,case islocal when 0then 外線 when 1...