面向切面程式設計(aspect oriented programming) 是軟體程式設計思想發展到一定階段的產物,是物件導向程式設計的有益補充。aop一般適用於具有橫切邏輯的場合,如訪問控制、事務管理、效能檢測等。
日誌、異常處理、事務控制等都是乙個健壯的業務系統所必須的。但是為了保證系統健壯可用,就要再眾多業務方法中反覆編寫類似的**,使得原本就很複雜的業務處理**變得更加複雜。業務功能的開發者還要考兩次這些額外的**是否處理正確,是否有遺漏的地方,如果需要修改日誌資訊的格式或者安全驗證的規則,或者再增加輔助功能,都會導致業務**頻繁而大量的修改。
面向切面程式設計,就是在不改變原程式的基礎上為**增加新的功能,對**段進行增強處理。他的設計思想**於**設計模式。
1.在原物件方法之前插入的增強處理為前置增強
2.該方法執行完以後插入的增強處理為後置增強
3.環繞在方法前後的增強處理為環繞增強,是最強大的增強處理,可以獲取或者修改目標方法的引數、返回值、異常處理、甚至決定目標方法是否執行。
4.該方法丟擲異常時的增強處理為異常丟擲增強
5.最終增強處理,無論方法丟擲異常還是正常退出都會得到執行,類似於異常處理機制中finally塊的作用,一般用於釋放資源
在springboot中使用註解
需要引入所需要的jar :spring-boot-starter-aop
建立乙個aop增強處理類
@slf4j使用@aspect定義切面,@pointcut定義切入點@aspect
@component
public
class
loggeraspect
//前置增強 在連線點執行之前執行的通知
@before("logpointcut()")
public
void
before()
//最終增強 在連線點執行之後執行的通知(返回通知和異常通知的異常)
@after("logpointcut()")
public
void
after()
/*** 後置增強 在連線點執行之後執行的通知(返回通知)
*/@afterreturning(value="logpointcut()",returning="result")
public
void
doafterreturning(joinpoint joinpoint, object result)
/*** 異常增強 在連線點執行之後執行的通知(異常通知)
*/@afterthrowing("logpointcut()")
public
void
doafterthrowing()
/*** 環繞增強
*/@around("logpointcut()")
public
void
doaround(proceedingjoinpoint jp)
catch
(throwable e)}}
切入點匹配的執行點為連線點為jointpoint,spring會自動注入該例項,通過joinpoint 的gettarget()方法可以得到被**物件,getsignature()方法返回被**的目標方法。getargs()方法返回傳遞給目標方法的引數陣列
對於後置增強,還可以定義乙個用於接收被**方法的返回值,必須在 @afterreturning註解中通過returning 屬性指定該引數的名稱
execution是切入點指示符,他括號中是乙個切入點表示式,可以配置要切入的方法,切入點表示式支援模糊匹配
public * adduser(com.entity.user) *表示匹配所有型別的返回值public void *(com.entity.user) *表示匹配所有方法名
public voidadduser(..) .. 表示匹配所有引數個數和型別
* com.user.*.*(..) 表示匹配com.entity包下所有類的所有方法
* com.user..*.*(..) 表示匹配com.entity包及其子包下所有類的所有方法
springboot中的AOP開發
三步 1.引入springboot boot start aop jar包 dependency groupid org.springframework.boot groupid artifactid spring boot starter aop artifactid dependency 2.開...
SpringBoot中AOP的使用
springboot中切面的使用非常簡單只需在類上新增 aspect註解 如下我們定義乙個controller的切面。每次傳送請求前,都會執行 before註解下的方法 aspect component public class myaspect before point public void b...
在SpringBoot中配置aop
aop作為spring的乙個強大的功能經常被使用,aop的應用場景有很多,但是實際的應用還是需要根據實際的業務來進行實現。這裡就以列印日誌作為例子,在springboot中配置aop 已經加入我的github模版中 經過那麼長時間的過程,我們也慢慢體會到,在spingboot專案中新增元素是非常方便...