摘要:前置通知返回通知當匹配的方法執行正常返回時運行獲取返回值當我們想獲取到某個方法的返回值時可以使用如下方式表示返回值類型這里使用的是類型我們也可以設置指定類型例如異常通知表示當拋出的是異常時才會調用此方法后置通知當匹配的方法執行完成后運行圍繞
@Before 前置通知
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; @Aspect public class BeforeExample { @Before("execution(* com.xyz.myapp.dao.*.*(..))") public void doAccessCheck() { // ... } }@AfterReturning 返回通知
當匹配的方法執行正常返回時運行.
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.AfterReturning; @Aspect public class AfterReturningExample { @AfterReturning("execution(* com.xyz.myapp.SystemArchitecture.dataAccessOperation())") public void doAccessCheck() { // ... } }獲取返回值
當我們想獲取到某個方法的返回值時, 可以使用如下方式:
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.AfterReturning; @Aspect public class AfterReturningExample { @AfterReturning( pointcut="execution(* com.xyz.myapp.SystemArchitecture.dataAccessOperation())", returning="retVal") public void doAccessCheck(Object retVal) { // ... } }
returning 表示返回值類型, 這里使用的是 Object 類型, 我們也可以設置指定類型 例如 List
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.AfterThrowing; @Aspect public class AfterThrowingExample { @AfterThrowing( pointcut="execution(* com.xyz.myapp.SystemArchitecture.dataAccessOperation())", throwing="ex") public void doRecoveryActions(DataAccessException ex) { // ... } }
throwing 表示當拋出的是 DataAccessException 異常時, 才會調用此方法.
@After 后置通知當匹配的方法執行完成后運行.
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.After; @Aspect public class AfterFinallyExample { @After("execution(* com.xyz.myapp.SystemArchitecture.dataAccessOperation())") public void doReleaseLock() { // ... } }@Around 圍繞通知
在匹配的方法執行前后執行.
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Component @Aspect public class AroundExample { @Around("execution(* com.example.demo.sss.TestService.*())") public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable { System.out.println("執行目標方法之前..."); Object retVal = pjp.proceed(); System.out.println("執行目標方法之后..."); return retVal + " ---> 1111"; } }
該方法的第一個形參必須是 ProceedingJoinPoint 類型, 在方法體中調用 proceed 方法才會執行目標方法; 如果程序沒有調用 proceed 方, 目標方法不會執行.
調用 proceed 方法時, 還可以傳入一個 Object[] 對象, 該數組中的值將被傳入目標方法作為實參. 如果傳入的 Object[] 數組長度與目標方法所需要的參數個數不相等, 或者 Object[] 數組元素與目標方法所需參數的類型不匹配, 程序就會拋出異常.
獲取通知參數任何通知方法都可以聲明一個類型為 org.aspectj.lang.JoinPoint 的參數, 作為它的第一個參數 JoinPoint 接口提供了許多有用的方法:
getArgs(): 返回方法參數.
getThis(): 返回代理對象.
getTarget(): 返回目標對象.
getSignature(): 返回建議的方法的描述.
toString(): 打印建議方法的描述.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72541.html
摘要:是一種特殊的增強切面切面由切點和增強通知組成,它既包括了橫切邏輯的定義也包括了連接點的定義。實際上,一個的實現被拆分到多個類中在中聲明切面我們知道注解很方便,但是,要想使用注解的方式使用就必須要有源碼因為我們要 前言 只有光頭才能變強 上一篇已經講解了Spring IOC知識點一網打盡!,這篇主要是講解Spring的AOP模塊~ 之前我已經寫過一篇關于AOP的文章了,那篇把比較重要的知...
摘要:入門和學習筆記概述框架的核心有兩個容器作為超級大工廠,負責管理創建所有的對象,這些對象被稱為。中的一些術語切面切面組織多個,放在切面中定義。 Spring入門IOC和AOP學習筆記 概述 Spring框架的核心有兩個: Spring容器作為超級大工廠,負責管理、創建所有的Java對象,這些Java對象被稱為Bean。 Spring容器管理容器中Bean之間的依賴關系,使用一種叫做依賴...
摘要:入門篇學習總結時間年月日星期三說明本文部分內容均來自慕課網。主要的功能是日志記錄,性能統計,安全控制,事務處理,異常處理等等。 《Spring入門篇》學習總結 時間:2017年1月18日星期三說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://git...
摘要:使用與的靜態代理不同,使用的動態代理,所謂的動態代理就是說框架不會去修改字節碼,而是在內存中臨時為方法生成一個對象,這個對象包含了目標對象的全部方法,并且在特定的切點做了增強處理,并回調原對象的方法。 AOP(Aspect Orient Programming),我們一般稱為面向方面(切面)編程,作為面向對象的一種補充,用于處理系統中分布于各個模塊的橫切關注點,比如事務管理、日志、緩存...
摘要:介紹什么是在軟件業,為的縮寫,意為面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。切面是切入點和通知引介的結合。切面類權限校驗。。。 1. AOP 1.1 AOP介紹 1.1.1 什么是AOP 在軟件業,AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術...
摘要:在寫完容器源碼分析系列文章中的最后一篇后,沒敢懈怠,趁熱打鐵,花了天時間閱讀了方面的源碼。從今天開始,我將對部分的源碼分析系列文章進行更新。全稱是,即面向切面的編程,是一種開發理念。在中,切面只是一個概念,并沒有一個具體的接口或類與此對應。 1. 簡介 前一段時間,我學習了 Spring IOC 容器方面的源碼,并寫了數篇文章對此進行講解。在寫完 Spring IOC 容器源碼分析系列...
閱讀 2803·2023-04-25 23:08
閱讀 1591·2021-11-23 09:51
閱讀 1570·2021-10-27 14:18
閱讀 3123·2019-08-29 13:25
閱讀 2838·2019-08-29 13:14
閱讀 2907·2019-08-26 18:36
閱讀 2197·2019-08-26 12:11
閱讀 819·2019-08-26 11:29