大战熟女丰满人妻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);
    }

輸出結果

 

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 成人欧美一区二区三区视频不卡 | 国产系列在线观看 | 成人欧美一区二区三区 | 色插综合| 国产成人精品综合 | 91粉嫩萝控精品福利网站 | 国产人成精品综合欧美成人 | 天天干夜夜怕 | 高清国产美女在线观看 | 国产精品视频在线播放 | 伊人免费视频二 | 国产福利午夜 | 久久精品国内一区二区三区 | 中文字幕日韩在线一区国内 | 五月婷婷开心综合 | jizz国产精品免费麻豆 | 国产成人做受免费视频 | 国产在线91精品入口首页 | 青青青国产在线 | 亚洲精品一区二区深夜福利 | 日本aⅴ永久免费网站www | 国产91一区二这在线播放 | 亚洲综合性图 | 狠狠操大逼 | 亚洲伊人久久综合 | 天天草天天 | 亚洲 欧美 国产 中文 | 黄色小视频免费看 | 国产va免费精品 | 久久网欧美 | 免费一级在线 | 日本免费一区二区三区看片 | 毛片真人毛毛片毛片 | 国产伦理一区二区三区 | 欧美成人另类 | 天天看片夜夜爽 | 国产亚洲欧美日韩v在线 | 另类av| 亚洲九九九 | 福利网站在线播放 | 国产成人影院一区二区 |