面向切面程式設計AOP的最佳入門示例

2021-08-21 09:47:20 字數 2905 閱讀 2519

aop(aspect oriented programming),意為:面向切面程式設計,通過預編譯方式和執行期動態**實現程式功能的統一維護的一種技術。它通過對既有程式定義乙個切入點,然後在其前後切入不同的執行內容,比如常見的有:開啟資料庫連線/關閉資料庫連線、開啟事務/關閉事務記錄日誌等。aop可以降低耦合,把通用的業務提出來,提高**的可重用性,同時提高開發的效率,使開發人員只關心真正的業務邏輯.

引入aop的依賴

>

>

org.springframework.bootgroupid

>

>

spring-boot-starter-aopartifactid

>

dependency

>

@enableaspectjautoproxy已經預設開啟,不需要在啟動類上新增.

而當我們需要使用cglib來實現aop的時候,需要配置spring.aop.proxy-target-class=true.但是注意:高版本spring自動根據執行類選擇jdk或cglib**,也就是當執行類沒有繼承介面,spring也會自動使用cglib**。我們無需設定proxy-target-class屬性,jdk動態**是模擬介面實現的方式,cglib是模擬子類繼承的方式,一般採用前者,因為前者效率高。

2 簡單示例

@aspect

@component

public

class

logaspect

else

log.

info

("entering method ["

+ methodname +

" with arguments ["

+ arguments +

"]")

; returnval = proceedingjoinpoint.

proceed()

;return returnval;

}catch

(throwable throwable)

finally

return null;

}protected logger getlog

(final joinpoint joinpoint)

return logge***ctory.

getlogger

(getclass()

);}}

1.當有多個切面針對同乙個切點時,可以使用@order()來指定執行順序,可以理解成多個同心圓,要執行的方法為圓心,最外層的order最小。從最外層按照aop1、aop2的順序依次執行doaround方法,dobefore方法。然後執行method方法,最後按照aop2、aop1的順序依次執行doafter、doafterreturn方法。也就是說對多個aop來說,先before的,一定後after。

2.@order的作用於可以在類,方法,欄位上,但是他指定的是容器中bean的載入順序.

可以通過自定義註解,來更針對性的定義切點.

2.1 首先自定義註解

@target()

@retention

(retentionpolicy.runtime)

@documented

public @inte***ce

systemservicelog

2.2 定義切面類

實現注有@systemservicelog的方法丟擲異常時,記錄日誌。

@aspect

@component

public

class

annotationaspect

@afterthrowing

(pointcut =

"serviceaspect()"

, throwing =

"e")

public

void

doafterthrowing

(joinpoint joinpoint, throwable e)

} logger log =

getlog

(joinpoint)

;try

catch

(exception ex)

", ex.

getmessage()

);}/***********記錄本地異常日誌***********/

log.

error

("異常方法:{}異常資訊:{}引數:{}"

, joinpoint.

gettarget()

.getclass()

.getname()

+ joinpoint.

getsignature()

.getname()

, e.

getmessage()

, params);}

protected logger getlog

(final joinpoint joinpoint)

return logge***ctory.

getlogger

(getclass()

);}}

2.3 在需要的方法上新增自定義註解

@service

public

class

usrserviceimpl

implements

iuserservice

}

以上即可.結合自定義註解和模板,可以實現很多方便的功能,如記錄系統操作日誌(新增,刪除等等),記錄異常等.對一些方法都有的邏輯可以提出來,如引數校驗,限制訪問頻率等.

aop 面向切面程式設計

起源 研究人員就對物件導向思想的侷限性進行了分析。他們研究出了一種新的程式設計思想,借助這一思想或許可以通過減少 重複模組從而幫助開發人員提高工作效率。隨著研究的逐漸深入,aop也逐漸發展成一套完整的程式設計思想,各種應用aop的技術也應運而生。aop思想 定義乙個切面,在切面的縱向定義處理方法,處...

AOP面向切面程式設計

1 概念 面向切面程式設計,通過預編譯方式和執行期動態 實現程式功能的統一維護的一種技術。aop是oop的延續,利用aop可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率 2 作用 1.解耦,將通用性的功能模組 與業務 解耦 ioc專...

AOP 面向切面程式設計

aop aspect oriented programming 即面向切面程式設計,可以說是oop object oriented programming 物件導向程式設計的補充和完善。面向切面程式設計是物件導向中的一種方式而已。在 執行過程中,動態嵌入其他 叫做面向切面程式設計。常見的使用場景 日...