大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 簡單的AOP配置方法

簡單的AOP配置方法

更新時間:2022-08-09 10:52:27 來源:動力節點 瀏覽772次

AOP配置,@EnableAspectJAutoProxy,@Before,@After,@AfterReturning,@AfterThrowing

AOP:【動態代理】

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

1.導入aop模塊;Spring AOP:

          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-aop</artifactId>
          </dependency>

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

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

通知方法:

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

后置通知(@After):logEnd:在目標方法(calculateNum)運行結束之后運行(無論方法正常結束還是異常結束)

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

異常通知(@AfterThrowing):logException:在目標方法(calculateNum)出現異常以后運行

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

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

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

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

7.給配置類中加 @EnableAspectJAutoProxy 【開啟基于注解的aop模式】

在Spring中很多的 @EnableXXX;

三步:

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

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

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

配置

// @EnableAspectJAutoProxy 開啟基于注解的aop模式
@EnableAspectJAutoProxy
@Configuration
public class MyAopConfig {
    @Bean
    public CalculateController calculateController(){
        return new CalculateController();
    }
    @Bean
    public LogAop logAop(){
        return new LogAop();
    }
}
/**
 * 切面類
 */
// @Aspect: 告訴Spring當前類是一個切面類
@Aspect
public class LogAop {
    //抽取公共的切入點表達式
    //1、本類引用
    //2、其他的切面引用
    @Pointcut("execution(public int com.example.studywork.work.controller.CalculateController.*(..))")
    public void pointCut(){};
    @Before(value ="pointCut()")
    public void logStart(JoinPoint joinPoint){
        System.out.println(joinPoint.getSignature().getName()+"方法運行前。。。參數列表是:{"+ Arrays.asList(joinPoint.getArgs())+"}");
    }
    // 外部切面類引用可以用全類名
    @After("com.example.studywork.work.aop.LogAop.pointCut()")
    public void logEnd(JoinPoint joinPoint){
        System.out.println(joinPoint.getSignature().getName()+"方法結束。。。");
    }
    //JoinPoint一定要出現在參數表的第一位
    @AfterReturning(value = "pointCut()",returning = "obj")
    public void logReturn(JoinPoint joinPoint,Object obj){
        System.out.println(joinPoint.getSignature().getName()+"方法正常返回。。。運行結果是:{"+obj+"}");
    }
    @AfterThrowing(value = "pointCut()",throwing = "e")
    public void logxception(JoinPoint joinPoint,Exception e){
        System.out.println(joinPoint.getSignature().getName()+"方法異常返回。。。異常結果是:{"+e+"}");
    }
}
// 業務
public class CalculateController {
    public int calculateNum(int i, int j){
        System.out.println("CalculateController類的calculateNum方法正在運行");
        return i/j;
    }
}

輸出

@Test
    public void test() {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MyAopConfig.class);
        CalculateController bean = applicationContext.getBean(CalculateController.class);
        bean.calculateNum(1,1);
    }

輸出結果

異常輸出

@Test
    public void test() {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MyAopConfig.class);
        CalculateController bean = applicationContext.getBean(CalculateController.class);
        bean.calculateNum(1,0);
    }

輸出結果

 

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产激情在线视频 | 久久精品青草社区 | 97色97色97色成人 | 操久在线 | 久久精品伊人波多野结 | 精品国产乱码久久久久久浪潮 | 国产普通话自拍 | 欧美一区二区手机在线观看视频 | 伊人在综合 | 日本欧美成 | 免费中文字幕不卡视频 | 精品一区二区三区18 | 五月四房 | 偷偷狠狠的日日高清完整视频 | 手机看片国产免费久久网 | 久久精品免费一区二区视 | 视频国产精品 | 日韩精品午夜视频一区二区三区 | www.黄视频| 欧美亚洲一区二区三区 | 国产青草视频免费观看97 | 五月婷婷狠狠干 | 日韩黄色精品 | 国产精品久久久精品视频 | 一级特黄一欧美俄罗斯毛片 | 99久女女精品视频在线观看 | 国产网红自拍 | 色人久久 | 亚洲成人一级 | 一级大片视频 | 国产成人免费在线 | 特级一级毛片视频免费观看 | 亚洲精品久久9热 | 国产一区二区三区四区 | 欧美激情在线一区二区三区 | 国产一级毛片视频在线! | 99国产精品热久久久久久夜夜嗨 | 国产激情视频一区二区三区 | 亚洲一级在线观看 | 欧美视频 亚洲视频 | 日韩一级不卡 |