SpringBoot AOP完全講解一:基礎概念
Aop 切面程式設計
aop
全稱 Aspect Oriented Programming
,面向切面,AOP
主要實現的目的是針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。其與設計模式完成的任務差不多,是提供另一種角度來思考程式的結構,來彌補面向物件程式設計的不足。
搭建Aop
本來 spring
就自帶一套 aop
實現,我們直接使用此實現即可,本來使用aop
還需要定義一些xml
檔案,但由於我們使用的是spring-boot
框架,這一步就省略掉了。 也就是說,在spring-boot
中,我們可以直接使用aop
xml
配置,只需要新增相應的以來即可
compile('org.springframework.boot:spring-boot-starter-web',
'org.springframework.boot:spring-boot-starter-aop' )
Aop 常用術語
- 切面(Aspect):
一個關注點的模組化,這個關注點可能會橫切多個物件。事務管理是J2EE應用中一個關於橫切關注點的很好的例子。在Spring AOP中,切面可以使用基於模式或者基於@Aspect註解的方式來實現。
- 連線點(Joinpoint):
在程式執行過程中某個特定的點,比如某方法呼叫的時候或者處理異常的時候。在Spring AOP中,一個連線點總是表示一個方法的執行。
- 通知(Advice):
在切面的某個特定的連線點上執行的動作。其中包括了“around”、“before”和“after”等不同型別的通知(通知的型別將在後面部分進行討論)。許多AOP框架(包括Spring)都是以攔截器做通知模型,並維護一個以連線點為中心的攔截器鏈。
- 切入點(Pointcut):
匹配連線點的斷言。通知和一個切入點表示式關聯,並在滿足這個切入點的連線點上執行(例如,當執行某個特定名稱的方法時)。切入點表示式如何和連線點匹配是AOP的核心:Spring預設使用AspectJ切入點語法。
- 引入(Introduction):
用來給一個型別宣告額外的方法或屬性(也被稱為連線型別宣告(inter-type declaration))。Spring允許引入新的介面(以及一個對應的實現)到任何被代理的物件。例如,你可以使用引入來使一個bean實現IsModified介面,以便簡化快取機制。
- 目標物件(Target Object):
被一個或者多個切面所通知的物件。也被稱做被通知(advised)物件。既然Spring AOP是通過執行時代理實現的,這個物件永遠是一個被代理(proxied)物件。
- AOP代理(AOP Proxy):
AOP框架建立的物件,用來實現切面契約(例如通知方法執行等等)。在Spring中,AOP代理可以是JDK動態代理或者CGLIB代理。
- 織入(Weaving):
把切面連線到其它的應用程式型別或者物件上,並建立一個被通知的物件。這些可以在編譯時(例如使用AspectJ編譯器),類載入時和執行時完成。Spring和其他純Java AOP框架一樣,在執行時完成織入。
切入點表示式
切入點表示式的格式:
execution([可見性] 返回型別 [宣告型別].方法名(引數) [異常])
其中【】中的為可選,其他的還支援萬用字元的使用:
- *:匹配所有字元
- ..:一般用於匹配多個包,多個引數
- +:表示類及其子類
運算子有:&&、||、!
常用的表示式
- 包名切面
對 com.app.controller
包中所有的類的所有方法切面
@Pointcut("execution(public * com.app.controller.*.*(..))")
- 包名及子包切面
對 com.app.controller
及其子包中所有的類的所有方法切面
@Pointcut("execution(public * com.app.controller..*.*(..))")
- 類名切面
只針對 StudentController
類切面
@Pointcut("execution(public * com.app.controller.StudentController.*(..))")
個人微訊號:zhaoyanjun125 , 歡迎關注