spring學習總結 三

2021-07-17 05:50:44 字數 2239 閱讀 8834

一、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...