一、aop的基本概念
織入:將增強處理新增到目標物件中,並建立乙個增強的物件的過程就是織入。織入有兩種實現方式:編譯時增強(如aspectj)和執行時增強(如spring aop)
引入:將方法或者字段新增到被處理的類中。
目標物件:被aop框架進行增強處理的物件。
aop**:aop框架建立的物件。 2、需要**類不是介面的時候,spring會自動的切換為使用cglib**。
3、基於註解的「零配置」方法
定義切面bean:@aspect
定義before增強處理:@before("execution(* cc.wsyw126.spring.service.imp.*.*(..))")
第乙個*表示返回型別不限
第二個*表示類名不限
第三個*表示方法名不限
括號中的..代表任意個數、型別不限的形參
pointcut可以省去(value作用同pointcut)
定義afterreturning增強處理:@afterreturning(returning="rt",pointcut = "execution(* cc.wsyw126.spring.service.imp.*.*(..))")
宣告rt時指定的型別會限制目標方法必須返回指定型別的值或沒有返回值
afterreturning修飾的方法,必須有引數。若將引數rt的型別宣告為object,意味著對目標方法的返回值不加限制
定義afterthrowing增強處理:@afterthrowing(throwing="ex",pointcut="execution(* cc.wsyw126.spring.service.imp.*.*(..))")
宣告ex時指定的型別會限制目標方法必須丟擲指定型別的異常
afterthrowing修飾的方法,必須有引數。若將引數ex的型別宣告為throwable,意味著對目標方法丟擲的異常不加限制
after增強處理:@after("execution(* cc.wsyw126.spring.service.imp.*.*(..))")
afterreturning:只有在目標方法成功完成後才會被織入。
after:不管方法如何結束(包括成功和異常終止),它都會被織入。
基於ii的性質,after增強處理通常用於釋放資源。
around增強處理
近似於before和afterreturning的總和。
不同的是:既可以決定目標方法在什麼時候執行,如何執行,甚至可以完全阻止目標方法的執行。
增強處理的方法的第乙個形參必須是proceedingjoinpoint型別(並且至少包含乙個形參)。
在方法內,呼叫proceed()方法才會執行目標方法,這就是控制目標方法執行時機和如何執行的關鍵。如果沒有呼叫,則目標方法不會執行。
讓切面類實現org.springframework.core.ordered介面,實現int getorder()方法,該方法返回值越小,優先順序越高。
直接使用@order註解來修飾乙個切面類。可指定乙個int型的value屬性,該屬性值越小,優先順序越高。
5、如果只訪問目標方法的引數,可以使用args切入點表示式來繫結目標方法的引數。
6、定義切入點:
包含兩部分
乙個切入點的表示式。
乙個包含名字和任意引數的方法簽名。
用法例項:
7、切入點指示符:
execution:用於匹配執行方法的連線點。
execution(modifiers-pattern?ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)
Spring學習總結
xx list,arrays setmap properties null list setmap props xx xx xx xx xx 注意 autowiring能夠與顯式的wiring一起使用。初始化屬性 public inte ce pointcutpublic inte ce class...
Spring學習總結
注 我是參考 spring實戰 這本書的 一 2.1中我們要給juggler加乙個吟詩的功能,我們不可能說改變perform方法吧,那又有新的功能,我們又得改變這個方法,那再改變呢?頻繁的修改呢?我們不可能頻繁的修改這個方法。那再寫乙個poem介面,這樣子我們只要新的能夠吟詩的poticjuggle...
spring學習總結
一 普通bean 之前操作的都是普通 bean。spring 直接建立 a例項,並返回 二 factorybean 是乙個特殊的 bean 具有工廠生成物件能力,只能生成特定的物件。bean必須使用 factorybean 介面,此介面提供方法 getobject 用於獲得特定 bean。先建立fb...