spring aop的簡單使用方法詳解

 更新時間:2019年10月07日 10:28:29   作者:﹏岸與海的距離╮   我要評論
這篇文章主要介紹了spring aop的簡單使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

 AOP:【動態代理】

指在程序運行期間動態的將某段代碼切入到指定方法指定位置進行運行的編程方式;

1、導入aop模塊;Spring AOP:(spring-aspects)

2、定義一個業務邏輯類(MathCalculator);在業務邏輯運行的時候將日志進行打印(方法之前、方法運行結束、方法出現異常,xxx)

3、定義一個日志切面類(LogAspects):切面類里面的方法需要動態感知MathCalculator.div運行到哪里然后執行;

通知方法:

  • 前置通知(@Before):logStart:在目標方法(div)運行之前運行
  • 后置通知(@After):logEnd:在目標方法(div)運行結束之后運行(無論方法正常結束還是異常結束)
  • 返回通知(@AfterReturning):logReturn:在目標方法(div)正常返回之后運行
  • 異常通知(@AfterThrowing):logException:在目標方法(div)出現異常以后運行
  • 環繞通知(@Around):動態代理,手動推進目標方法運行(joinPoint.procced())

4、給切面類的目標方法標注何時何地運行(通知注解);

5、將切面類和業務邏輯類(目標方法所在類)都加入到容器中;

6、必須告訴Spring哪個類是切面類(給切面類上加一個注解:@Aspect)

[7]、給配置類中加 @EnableAspectJAutoProxy 【開啟基于注解的aop模式】
在Spring中很多的 @EnableXXX;

三步:

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

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

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

package com.opk.bean;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;

import java.util.Arrays;

/* 
 * @Aspect: 告訴Spring當前類是一個切面類
 * wmy 13:03 2019/9/5
 * @Param 
 * @return 
 **/
@Aspect
public class LogAspects {

  //抽取公共的切入點表達式
  //1、本類引用
  //2、其他的切面引用
  @Pointcut("execution(public * com.opk.bean.*.*(..))")
  public void pointCut(){};

  //@Before在目標方法之前切入;切入點表達式(指定在哪個方法切入)
  @Before("pointCut()")
  public void logStart(JoinPoint joinPoint){
    Object[] args = joinPoint.getArgs();
    System.out.println(joinPoint.getSignature().getName()+":運行。。。@Before,參數列表是:"+ Arrays.asList(args));
  }
  @After("com.opk.bean.LogAspects.pointCut()")
  public void logEnd(JoinPoint joinPoint){
    System.out.println(""+joinPoint.getSignature().getName()+"結束。。。@After");
  }

  //JoinPoint一定要出現在參數的第一位
  @AfterReturning(value ="pointCut()",returning = "result")
  public void logReturn(JoinPoint joinPoint,Object result){
    System.out.println(""+joinPoint.getSignature().getName()+"正常返回。。。@AfterReturning:運行結果:{"+result+"}");
  }

  @AfterThrowing(value ="pointCut()",throwing = "ex")
  public void logException(JoinPoint joinPoint,Exception ex){
    System.out.println(""+joinPoint.getSignature().getName()+"異常。。。異常信息:{"+ex+"}");
  }
}
import org.springframework.stereotype.Component;

@Component
public class MathCalculator {
  public int dev(int i,int j)
  {
    System.out.println("MathCalculator......");
    return i/j;
  }
}
@EnableAspectJAutoProxy
@Configuration
public class AOPConfig {

  //業務邏輯類加入容器中
  @Bean("calculator")
  public MathCalculator calculator(){
    return new MathCalculator();
  }

  //切面類加入到容器中
  @Bean
  public LogAspects logAspects(){
    return new LogAspects();
  }
}
public static void main(String[] args) {
    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
    ctx.register(AOPConfig.class);
    ctx.refresh();
    MathCalculator bean = (MathCalculator)ctx.getBean("calculator");
    bean.dev(10,3);

  }

運行結果:

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

相關文章

  • Java編程求二叉樹的鏡像兩種方法介紹

    Java編程求二叉樹的鏡像兩種方法介紹

    這篇文章主要介紹了Java編程求二叉樹的鏡像兩種方法介紹,分享了兩種方法,遞歸與非遞歸,每種方法又分別介紹了兩種解決思路,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • java語言注解基礎概念詳解

    java語言注解基礎概念詳解

    這篇文章主要介紹了java語言注解基礎概念詳解,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • java多線程Thread-per-Message模式詳解

    java多線程Thread-per-Message模式詳解

    本篇文章給大家分享java多線程Thread-per-Message模式的相關知識點,對此有興趣的朋友參考學習下。
    2018-05-05
  • struts2中simple主題下<s:fieldError>標簽默認樣式的移除方法

    struts2中simple主題下<s:fieldError>標簽默認樣式的移除方

    這篇文章主要給大家介紹了關于struts2中simple主題下<s:fieldError>標簽默認樣式的移除方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧
    2018-10-10
  • java實現登錄案例

    java實現登錄案例

    這篇文章主要為大家詳細介紹了java實現登錄案例的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • struts2中使用注解配置Action方法詳解

    struts2中使用注解配置Action方法詳解

    這篇文章主要介紹了struts2中使用注解配置Action方法詳解,涉及一個示例,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • Spring MVC請求參數接收的全面總結教程

    Spring MVC請求參數接收的全面總結教程

    這篇文章主要給大家總結介紹了關于Spring MVC請求參數接收的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-08-08
  • springboot配置允許跨域訪問代碼實例

    springboot配置允許跨域訪問代碼實例

    這篇文章主要介紹了springboot配置允許跨域訪問代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • java解一個比較特殊的數組合并題

    java解一個比較特殊的數組合并題

    這篇文章主要介紹了java解一個比較特殊的數組合并題,需要的朋友可以參考下
    2014-06-06
  • Java多線程Queue、BlockingQueue和使用BlockingQueue實現生產消費者模型方法解析

    Java多線程Queue、BlockingQueue和使用BlockingQueue實現生產消費

    這篇文章主要介紹了Java多線程Queue、BlockingQueue和使用BlockingQueue實現生產消費者模型方法解析,涉及queue,BlockingQueue等有關內容,具有一定參考價值,需要的朋友可以參考。
    2017-11-11

最新評論

北京pk赛车人工计划软件手机版