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 物件導向程式設計的補充和完善。面向切面程式設計是物件導向中的一種方式而已。在 執行過程中,動態嵌入其他 叫做面向切面程式設計。常見的使用場景 日...