亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么搭建一個AOP測試環境

發布時間:2021-10-28 16:25:10 來源:億速云 閱讀:190 作者:iii 欄目:web開發

本篇內容介紹了“怎么搭建一個AOP測試環境”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

寫在前面

金九銀十的跳槽黃金期已拉開序幕,相信很多小伙伴也在摩拳擦掌,想換一個新的工作環境。然而,由于今年疫情的影響,很多企業對于招聘的要求是越來越嚴格。之前,很多不被問及的知識點,最近面試時都會被問到了。這不,有些面試官竟然讓面試者現場搭建一個AOP測試環境。那怎么辦呢?那就給他搭建一個唄!

什么是AOP?

AOP (Aspect Orient Programming),直譯過來就是 面向切面編程。AOP  是一種編程思想,是面向對象編程(OOP)的一種補充。面向對象編程將程序抽象成各個層次的對象,而面向切面編程是將程序抽象成各個切面。

比如,在《Spring實戰(第4版)》中有如下一張圖描述了AOP的大體模型。

怎么搭建一個AOP測試環境

從這張圖中,我們可以看出:所謂切面,相當于應用對象間的橫切點,我們可以將其單獨抽象為單獨的模塊。

總之一句話:AOP是指在程序的運行期間動態的將某段代碼切入到指定方法、指定位置進行運行的編程方式。AOP的底層是使用動態代理實現的。

搭建環境

1.導入AOP依賴

要想搭建AOP環境,首先,我們就需要在項目的pom.xml文件中引入AOP的依賴,如下所示。

<properties>     <spring.version>5.2.6.RELEASE</spring.version> </properties> <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-aspects</artifactId>     <version>${spring.version}</version> </dependency>

2.定義目標類

在io.mykit.spring.plugins.register.aop包下創建一個MathHandler類,用于處理數學計算上的一些邏輯。比如,我們在MathHandler類中定義了一個加法操作,返回兩個整數類型值的和,如下所示。

package io.mykit.spring.plugins.register.aop; /**  * @author binghe  * @version 1.0.0  * @description 定義一個數據處理器類,用于測試AOP  */ public class MathHandler {      public int add(int i, int j){         System.out.println("目標方法執行");         return i + j;     } }

3.定義切面類

在io.mykit.spring.plugins.register.aspect包下創建一個LogAspect切面類,在LogAspect類中定義了幾個打印日志的方法,以這些方法來感知MathHandler類中的add()方法的運行情況。如果需要切面類來感知目標類方法的運行情況,則需要使用Spring  AOP中的通知方法。

AOP中的通知方法及其注解與含義如下:

  • 前置通知(@Before):在目標方法運行之前運行。

  • 后置通知(@After):在目標方法運行結束之后運行,不管是正常結束還是異常結束都會執行。

  • 返回通知(@AfterReturning):在目標方法正常返回之后運行。

  • 異常通知(@AfterThrowing):在目標方法拋出異常后運行。

  • 環繞通知(@Around):動態代理,手動推進目標方法運行。

綜上,LogAspect類中的具體方法定義如下所示。

package io.mykit.spring.plugins.register.aspect; import org.aspectj.lang.annotation.*; /**  * @author binghe  * @version 1.0.0  * @description 打印日志的切面類  */ @Aspect public class LogAspect {      @Pointcut("execution(public int io.mykit.spring.plugins.register.aop.MathHandler.*(..))")     public void pointCut(){      }      @Before("pointCut()")     public void logStart(){         System.out.println("加法運行開始,參數列表是:{}");     }      @After("pointCut()")     public void logEnd(){         System.out.println("加法運行結束");     }      @AfterReturning("pointCut()")     public void logReturn(){         System.out.println("加法正常返回,運行結果:{}");     }      @AfterThrowing("pointCut()")     public void logException(){         System.out.println("加法異常,異常信息:{}");     } }
  • logStart()方法:MathHandler類的add()方法運行之前運行。

  • logEnd()方法:MathHandler類的add()方法運行結束之后運行。

  • logReturn()方法:MathHandler類的add()方法正常返回之后運行。

  • logException()方法:MathHandler類的add()方法拋出異常后執行。

4.將目標類和切面類加入到IOC容器

在io.mykit.spring.plugins.register.config包中,新建AopConfig類,并使用@Configuration注解標注這是一個Spring的配置類,同時使用@EnableAspectJAutoProxy注解開啟基于注解的AOP模式。在AopConfig類中,使用@Bean注解將MathHandler類和LogAspect類加入到IOC容器中,如下所示。

package io.mykit.spring.plugins.register.config; import io.mykit.spring.plugins.register.aop.MathHandler; import io.mykit.spring.plugins.register.aspect.LogAspect; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; /**  * @author binghe  * @version 1.0.0  * @description 測試AOP  */ @Configuration @EnableAspectJAutoProxy public class AopConfig {          @Bean     public MathHandler mathHandler(){         return new MathHandler();     }      @Bean     public LogAspect logAspect(){         return new LogAspect();     } }

5.創建測試類

在 io.mykit.spring.test包中創建AopTest測試類,并在AopTest類中創建testAop01()方法,如下所示。

package io.mykit.spring.test; import io.mykit.spring.plugins.register.aop.MathHandler; import io.mykit.spring.plugins.register.config.AopConfig; import org.junit.Test; import org.springframework.context.annotation.AnnotationConfigApplicationContext; /**  * @author binghe  * @version 1.0.0  * @description 測試切面  */ public class AopTest {      @Test     public void testAop01(){         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AopConfig.class);         MathHandler mathHandler = context.getBean(MathHandler.class);         mathHandler.add(1, 2);         context.close();     } }

運行AopTest類中的testAop01()方法,輸出的結果信息如下所示。

加法運行開始,參數列表是:{} 目標方法執行 加法運行結束 加法正常返回,運行結果:{}

可以看到,執行了切面類中的方法,并打印出了相關信息。但是沒有打印參數列表和運行結果。

6.在切面類中打印參數列表和返回結果

那如果需要打印出參數列表和運行結果,該怎么辦呢?別急,我們繼續往下看。

要想打印出參數列表和運行結果,就需要對LogAspect類中的方法進行優化,優化后的結果如下所示。

package io.mykit.spring.plugins.register.aspect;  import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.*; import java.util.Arrays; /**  * @author binghe  * @version 1.0.0  * @description 打印日志的切面類  */ @Aspect public class LogAspect {      @Pointcut("execution(public int io.mykit.spring.plugins.register.aop.MathHandler.*(..))")     public void pointCut(){      }      @Before("pointCut()")     public void logStart(JoinPoint joinPoint){         System.out.println(joinPoint.getSignature().getName() + " 運行開始,參數列表是:{"+ Arrays.asList(joinPoint.getArgs()) +"}");     }      @After("pointCut()")     public void logEnd(JoinPoint joinPoint){         System.out.println(joinPoint.getSignature().getName() + " 運行結束");     }      @AfterReturning(value = "pointCut()", returning = "result")     public void logReturn(JoinPoint joinPoint, Object result){         System.out.println(joinPoint.getSignature().getName() + " 正常返回,運行結果:{"+result+"}");     }      @AfterThrowing(value = "pointCut()", throwing = "exception")     public void logException(JoinPoint joinPoint, Exception exception){         System.out.println(joinPoint.getSignature().getName() + " 異常,異常信息:{"+exception+"}");     } }

這里,需要注意的是:JoinPoint參數一定要放在參數的第一位。

此時,我們再次運行AopTest類中的testAop01()方法,輸出的結果信息如下所示。

add 運行開始,參數列表是:{[1, 2]} 目標方法執行 add 運行結束 add 正常返回,運行結果:{3}

7.目標方法拋出異常

我們在MathHandler類的add()方法中拋出一個異常,來測試下異常情況,如下所示。

package io.mykit.spring.plugins.register.aop;  /**  * @author binghe  * @version 1.0.0  * @description 定義一個數據處理器類,用于測試AOP  */ public class MathHandler {      public int add(int i, int j){         System.out.println("目標方法執行");         throw new RuntimeException();        //return i + j;     } }

此時,我們再次運行AopTest類中的testAop01()方法,輸出的結果信息如下所示。

add 運行開始,參數列表是:{[1, 2]} 目標方法執行 add 運行結束 add 異常,異常信息:{java.lang.RuntimeException}

可以看到,正確的輸出了切面中打印的信息。

“怎么搭建一個AOP測試環境”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

aop
AI

葵青区| 林州市| 金溪县| 大荔县| 石狮市| 霍林郭勒市| 榆中县| 岑溪市| 密云县| 喀什市| 闽清县| 福泉市| 松江区| 吴堡县| 南靖县| 漳州市| 洛隆县| 米泉市| 宁阳县| 湘乡市| 项城市| 资溪县| 佛山市| 治县。| 临桂县| 胶州市| 交口县| 安福县| 临安市| 开远市| 平阳县| 道真| 鹤峰县| 慈溪市| 新沂市| 灵石县| 从江县| 房山区| 潮州市| 嘉义市| 商河县|