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

輸出結果

 

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 亚洲一欧洲中文字幕在线 | 久久成人精品 | 99热精品国产三级在线观看 | 久久国产美女 | 亚洲精品久久久久综合网 | 女网址www女影院 | 夜色福利久久久久久777777 | 国产精品视频a | 成年女人色毛片免费 | 国产精品www | 国产成人经典三级在线观看 | 日本一区色 | 五月激情久久 | 亚欧在线免费观看 | aaaaa级毛片 aaaa级毛片欧美的 | 久久咪咪| 亚洲黄区| 国产免费区 | 日本1区2区3区 | 国产理论精品 | 欧美视频 亚洲视频 | 手机看片日韩日韩国产在线看 | 亚洲欧美日韩国产综合久 | 欧美α片无限看在线观看免费 | 欧美性色黄大片一级毛片视频 | 免费看一级毛片 | 99热久久国产精品免费看 | 欧美大黄大色一级毛片出红 | 欧美在线成人免费国产 | 欧美日本综合 | 九九热精 | 青草免费免费观看视频在线 | 日本爽快片100色毛片 | 精品国产一区二区三区四区色 | 亚洲三级天堂 | 久久久久免费精品视频 | 在线观看黄色免费视频 | aaa黑人一级毛片 | 久久黄色一级视频 | 欧美一a一片一级一片 | 欧美成人午夜视频 |