Spring AOP實現方式

2021-07-08 22:30:40 字數 2866 閱讀 8894

spring中4中aop區別

1. advisor類:需要依賴spring介面,spring版本比較低時可以採取這種方式

2.:適合使用者從低版本spring遷移到高版本spring,重複利用以前advice類情況

3.:使用配置檔案形式定義切面,比較推薦的一種方式,使用於對維護性要求較高的情況

4.@aspject:使用註解形式定義切面,使用方便,但維護性比低

通advisor類方式使用aop

增強介面:methodbeforeadvice(前置增強)、afterreturningadvice(後置增強)、methodinterceptor(環繞增強)、throwsadvice(異常增強)、introductioninterceptor引介增強)

切點介面:staticmethodmatcherpointcut(靜態方法切點)、dynamicmethodmatcherpointcut(動態方法切點)(由於是在方法執行過程中決定切入條件,因此,很好效能)、expressionpointcut(表示式切點)、annotationmatcherpointcut(註解切點)、controlflowpointcut(控制流切點)、composablepointcut(復合切點)

切面:主要有三種型別,分別為簡單切面(advisor:有乙個增強組成),切點切面(pointcutadvisor:有乙個切點和增強組成),引介切面(introductionadvisor)

pointcutadvisor實現類:

defaultpointcutadvisor:由乙個切點物件和增強物件組成,使用範圍最廣的一種切面

namematchermethodpointcutadvisor:由namemathcermethodpointcut切點和增強組成,匹配指定字元方法名切點

regexpmethodmatcherpointcutadvisor:由regexpmethodmatcherpointcut和增強組成,通過正規表示式匹配切點

aspjectjexpressionpointcutadvisor:用於aspjectj表示式定義切點的切面

aspjectpointcutadvisor:用於aspectj語法定義切面

通advisor實現aop例子如下

//切點物件

public class pointcuttest extends abstractregexpmethodpointcut

//增強

public class advicetest implement methodbeforeadvice

//業務類

public class service

public void service2()

public void other()

}

定義乙個增強,及切點,再同增強和切點定義切面,最後通過proxyfactorybeaan工廠對目標類物件織入,proxyfactorybean有兩個子類,分別代表使用cglib和jdk方式產生**物件,具體規則:如果**生產介面則預設使用jdk方式,如果是類則使用cglib方式。jdk和cglib產生**物件的優缺點,jdk產生**物件效能比cglib,但是**物件使用效能cglib比jdk高很多,因此,在使用單例模式可以使用cglib方式產生**,其他模式使用jdk產生**比較好

每乙個**類都要配置**工廠來**,使用不夠簡化,spring也意識到了這種問題,spring提供自動產生**工廠的建立類,主要有3種如下

基於bean配置名規則的自動**建立器:允許為一組特定配置名的bean自動建立**例項的**建立器,實現類為beannameautoproxycreator

基於advisor匹配機制自動**建立器:它會掃瞄容器中所有的bean,找出所有的advisor物件,並自動將切面織入到目標物件中,實現類為defaultadvisorautoproxycreator

基於aspject註解自動建立**建立器:它會掃瞄容器中所有aspjectj註解的類,並自動將切面織入到目標物件中,實現類為annotationawareaspjectjautoproxycreator

上面的配置可以通過這種方式來簡化配置

定義增強

定義切點

定義目標類

由切點和增強定義切面

使用自動**建立器自動產生**物件

基於實現織入

增強

目標類service

" />

通aop定義切面

使用advisor自動建立器

基於實現織入

public class advicetest1

}

配置檔案:

增強

目標類使用註解建立器

使用aop配置切面使用advisor自動建立器

基於aspjectj註解實現織入

//通過註解定義切面

@aspject

public class annotationadvisor

}

配置檔案:

目標類

使用註解建立器

注意:在使用、、@aspectj時,可以用過joinpoint物件獲取目標類資訊,引介增強使用proceedingjoinpoint

spring aop實現方式

詳解 在引入aop模組之後,一般來講,不用去做其他配置。spring.aop.auto屬性預設是開啟的,也就是說只要引入了aop的依賴之後,預設已經增加了 enableaspectjautoproxy org.springframework.bootgroupid spring boot start...

spring aop的實現方式

1.基於xml配置的spring aop 2.基於註解配置的aop aop常用的實現方式有兩種,一種是採用宣告的方式來實現 基於xml 一種是採用註解的方式來實現 基於aspectj 首先複習下aop中一些比較重要的概念 advisor 通知器 其實就是切點和通知的結合 一 基於xml配置的spri...

spring aop 的幾種實現方式

博主只用過或者了解過三種用法 1.其於 實現 2.原生的切面 3.aspectj註解驅動的切面 個人感覺第一種用起來比較簡單。也比較好理解,主要有以下的配置檔案 這樣就可以簡單的完成乙個aop 的實現 了 第二種 是基於在原始的標籤在配置的aop 就是注入到spring容器中了 網上的另一中寫法 a...