Spring學習筆記 1 ,AOP

2021-10-04 18:17:16 字數 1886 閱讀 2827

aop

aspect oriented programming

動態**

//為目標物件建立**物件

//方法執行器,幫我們目標物件執行目標方法

invocationhandler h = new invocationhandler()}

class<?> inte***ces = calculator.getclasss().getinte***ces();

classloader loader = calculator.getclass().getclassloader();

proxy.newproxyinstance(loader, inte***ces,h);

**物件和被**物件唯一的關聯:實現同乙個介面

動態**的缺點

1)複雜

2)jdk預設的動態**,如果目標物件沒有實現任何介面,無法建立**物件

基本概念:

切面類橫切關注點

通知方法

連線點切入點

切入點表示式

配置步驟

1)將目標類和切面類加入到容器

2) 告訴spring哪個是切面類@aspect

3)告訴spring切面類每個方法何時執行

4)開啟基於註解的aop功能 aop命名空間

aop:aspectj-autoproxy

通知註解

@before 前置通知 目標方法之前

@after 後置通知目標方法結束之後

@afterreturning 返回通知 目標方法正常返回之後

@afterthrowing 異常通知目標方法丟擲異常之後

@around 環繞通知

匹配任意型別引數

@afterreturning(value=「execution(public int com.impl.mymath*(int,*))」,returning=「result」)

匹配任意個引數

@before(「execution(int com.impl.mymath*(…))」)

匹配任意多層路徑

@afterthrowing(value=「execution(int com.impl…mymath*(…))」,throwing=「exception」)

獲取bean

有介面,ioc.getbean(「介面型別」)

沒有介面,ioc.getbean(「本型別」)

通知方法執行順序

正常:@before----@after-----@afterreturning

異常:@before——@after——@afterthrowing

在通知方法執行時,拿到目標方法的資訊

jointpoint jointpoint

jointpoint.getargs()

jointpoint.getsignature()

spring對通知方法的約束不嚴格,唯一要求是引數不能亂寫,每個引數必須是spring認識的

表示式重用

@pointcut(「execution(* *(…))」)

public void mypointcut(){};

環繞通知

@around

public object myaround(proceedingjointpoint pjp)catch(exception e) finally

}順序:環繞前置—普通前置—目標方法執行—環繞正常返回/異常—環繞後置—普通後置—普通正常返回/異常

@order(1) //改變切面順序

基於xml配置

aop:config

//全域性切入點表示式

(…)」 id=「globalpointcut」>

//內部切入點表示式

*(…)」 id=「mypointcut」>

Spring學習筆記 AOP

1 匯入aop模組 spring aop spring aspects 2 定義乙個業務邏輯 3 定義乙個日誌切面類 通知方法 前置通知 before 在目標方法執行之前執行 後置通知 after 在目標方法執行結束後執行 返回通知 afterrerurning 在目標方法正常返回之後執行 異常通知...

Spring學習筆記3 AOP

這一章是上周四晚上看的,一直沒空寫,所以今天補寫一下。spring aop,即面向切面設計。我覺得可以這樣理解這個概念,把幾個類並排放著,然後用一把 刀 橫向地切過。這幾個類共同有或者相似的幾個方法,就是切出來的。在oo的思想裡,如果類b中,有類a的一些方法,則可以讓b繼承a。但是繼承,就限制b一定...

Spring學習筆記三 註解AOP

1.匯入jar包 service public class studentservice component aspect public class studentadvice afterreturning value execution cn.wang.service.如果目標方法有返回值,後置增...