欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring注解驅(qū)動之AOP功能測試

 更新時間:2020年04月16日 08:28:23   作者:TomDu  
這篇文章主要介紹了Spring注解驅(qū)動之AOP功能測試,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

前言

Spring的AOP指的是在程序運行期間動態(tài)的將某段代碼切入到指定方法指定位置進行運行的編程方式【動態(tài)代理】。

AOP功能測試

①導入AOP模塊

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>4.3.12.RELEASE</version>
    </dependency>

②定義邏輯組件和切面類

邏輯組件

在業(yè)務邏輯運行的時候?qū)⑷罩具M行打?。ǚ椒ㄖ啊⒎椒ㄟ\行結(jié)束、方法出現(xiàn)異常,xxx)

public class MathCalculator {
  
  public int div(int i,int j){
    System.out.println("MathCalculator...div...");
    return i/j;  
  }

}

切面類

切面類里面的方法需要動態(tài)感知MathCalculator.div運行到哪里然后執(zhí)行;

/**
 * 切面類  必須告訴Spring哪個類是切面類(給切面類上加一個注解:@Aspect)
 * @Aspect: 告訴Spring當前類是一個切面類
 *
 */
@Aspect
public class LogAspects {
  
  //抽取公共的切入點表達式
  //1、本類引用 pointCut()
  //2、其他的切面引用 com.atneusoft.springboot.aop.LogAspects.pointCut()
  @Pointcut("execution(public int com.atneusoft.springboot.aop.MathCalculator.*(..))")
  public void pointCut(){};
  
  //@Before在目標方法之前切入;切入點表達式(指定在哪個方法切入)
  //給切面類的目標方法標注何時何地運行(通知注解@Before\@After\@AfterReturning\@AfterThrowing)  //前置通知(@Before):在目標方法(div)運行之前運行
  @Before("pointCut()")
  public void logStart(JoinPoint joinPoint){
    Object[] args = joinPoint.getArgs();
    System.out.println(""+joinPoint.getSignature().getName()+"運行。。。@Before:參數(shù)列表是:{"+Arrays.asList(args)+"}");
  }
    //后置通知(@After):在目標方法(div)運行結(jié)束之后運行(無論方法正常結(jié)束還是異常結(jié)束)
  @After("com.atneusoft.springboot.aop.LogAspects.pointCut()")
  public void logEnd(JoinPoint joinPoint){
    System.out.println(""+joinPoint.getSignature().getName()+"結(jié)束。。。@After");
  }
  
  //JoinPoint一定要出現(xiàn)在參數(shù)表的第一位  //返回通知(@AfterReturning):在目標方法(div)正常返回之后運行
  @AfterReturning(value="pointCut()",returning="result")
  public void logReturn(JoinPoint joinPoint,Object result){
    System.out.println(""+joinPoint.getSignature().getName()+"正常返回。。。@AfterReturning:運行結(jié)果:{"+result+"}");
  }
  //異常通知(@AfterThrowing):在目標方法(div)出現(xiàn)異常以后運行
  @AfterThrowing(value="pointCut()",throwing="exception")
  public void logException(JoinPoint joinPoint,Exception exception){
    System.out.println(""+joinPoint.getSignature().getName()+"異常。。。異常信息:{"+exception+"}");
  }

}

③將切面類和業(yè)務邏輯類(目標方法所在類)都加入到容器中,給配置類中加 @EnableAspectJAutoProxy 【開啟基于注解的aop模式,與配置文件的以下形式相同

<!-- 開啟基于注解版的切面功能 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

@EnableAspectJAutoProxy
@Configuration
public class MainConfigOfAOP {
   
  //業(yè)務邏輯類加入容器中
  @Bean
  public MathCalculator calculator(){
    return new MathCalculator();
  }

  //切面類加入到容器中
  @Bean
  public LogAspects logAspects(){
    return new LogAspects();
  }
}
@Test
  public void test01(){
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfAOP.class);
    
    //1、不要自己創(chuàng)建對象
//    MathCalculator mathCalculator = new MathCalculator();
//    mathCalculator.div(1, 1);
    MathCalculator mathCalculator = applicationContext.getBean(MathCalculator.class);
    
    mathCalculator.div(1, 0);
    
    applicationContext.close();
  }
07:49:45.185 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'mathCalculator'
div運行。。。@Before:參數(shù)列表是:{[1, 1]}
MathCalculator...div...
div結(jié)束。。。@After
div正常返回。。。@AfterReturning:運行結(jié)果:{1}
com.atneusoft.springboot.aop.MathCalculator@5965be2d

總結(jié)

三步:

1)、將業(yè)務邏輯組件和切面類都加入到容器中;告訴Spring哪個是切面類(@Aspect)

2)、在切面類上的每一個通知方法上標注通知注解,告訴Spring何時何地運行(切入點表達式)

3)、開啟基于注解的aop模式;@EnableAspectJAutoProxy

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • @RequestBody獲取不到參數(shù)的問題

    @RequestBody獲取不到參數(shù)的問題

    這篇文章主要介紹了@RequestBody獲取不到參數(shù)的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SpringBoot依賴注入的詳細介紹、使用技巧

    SpringBoot依賴注入的詳細介紹、使用技巧

    在Spring Boot中,依賴注入是一項關鍵的特性,它通過容器來管理和注入應用程序中的各種組件,本文介紹SpringBoot依賴注入的詳細介紹、使用技巧,感興趣的朋友一起看看吧
    2024-01-01
  • SpringBoot整合Redis正確的實現(xiàn)分布式鎖的示例代碼

    SpringBoot整合Redis正確的實現(xiàn)分布式鎖的示例代碼

    這篇文章主要介紹了SpringBoot整合Redis正確的實現(xiàn)分布式鎖的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 使用SpringJPA?直接實現(xiàn)count(*)

    使用SpringJPA?直接實現(xiàn)count(*)

    這篇文章主要介紹了SpringJPA?直接實現(xiàn)count(*),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot集成內(nèi)存數(shù)據(jù)庫Derby的實踐

    SpringBoot集成內(nèi)存數(shù)據(jù)庫Derby的實踐

    像H2、hsqldb、derby、sqlite這樣的內(nèi)存數(shù)據(jù)庫,小巧可愛,做小型服務端演示程序,非常好用。最大特點就是不需要你另外安裝一個數(shù)據(jù)庫。本文主要介紹了SpringBoot集成內(nèi)存數(shù)據(jù)庫Derby,感興趣的可以了解一下
    2021-09-09
  • Java遍歷Json的簡單實例

    Java遍歷Json的簡單實例

    這篇文章主要介紹了Java遍歷Json的簡單實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java旋轉(zhuǎn)二維數(shù)組實例

    java旋轉(zhuǎn)二維數(shù)組實例

    這篇文章主要介紹了java旋轉(zhuǎn)二維數(shù)組,以實例形式較為詳細的講述了旋轉(zhuǎn)二維數(shù)的原理與實現(xiàn)方法,需要的朋友可以參考下
    2014-10-10
  • Jax-rs規(guī)范下REST接口使用方法詳解

    Jax-rs規(guī)范下REST接口使用方法詳解

    這篇文章主要介紹了Jax-rs規(guī)范下REST接口使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • Spring使用支付寶掃碼支付

    Spring使用支付寶掃碼支付

    這篇文章主要為大家詳細介紹了Spring使用支付寶掃碼支付的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • spring boot注解方式使用redis緩存操作示例

    spring boot注解方式使用redis緩存操作示例

    這篇文章主要介紹了spring boot注解方式使用redis緩存操作,結(jié)合實例形式分析了spring boot注解方式使用redis緩存相關的依賴庫引入、注解使用及redis緩存相關操作技巧,需要的朋友可以參考下
    2019-11-11

最新評論