<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Spring AOP 的實現原理

      一、AOP的基本概念

      將橫切關注點(日志、事務、權限)從業務邏輯中分離出來,提高代碼的可維護性。

      下面將解釋,AOP專屬名詞,切面、連接點、切點、通知、目標對象、代理對象:

      • 切面:切面是封裝橫切關注點的模塊,比如日志記錄。 @Aspect 修飾類,如 LoggingAspect
      • 連接點:連接點就是作用的實際方法
      • 切點:@Pointcut("execution(* org.example.tao.service.impl.UserServiceImpl.getAllUsers(..))")
      • 通知:@Before @AfterReturning @AfterThrowing @After @Around
      • 目標對象:原始業務對象
      • 代理對象:Spring 啟動時動態生成的代理對象

      二、Spring AOP

      2.1 實現原理

      Spring AOP 是基于動態代理實現的,具體有倆種代理方式:

      • JDK 動態代理(需要有接口)
      • CGLIB 動態代理

      代理模式 http://www.rzrgm.cn/handsometaoa/p/16107991.html

      2.2 優劣勢

      優點:

      • 解耦:將橫切關注點與業務邏輯分離,提高代碼的可維護性。
      • 靈活:通過切點表達式可以靈活地定義攔截規則。
      • 非侵入式:無需修改目標類代碼,即可實現功能增強。

      缺點:

      • 性能開銷:動態代理會引入一定的性能開銷。
      • 局限性:只能攔截Spring管理的Bean,且無法攔截非public方法。

      2.3 工作流程

      1. 定義切面:
        使用@Aspect注解定義切面類。
        在切面類中定義通知方法,并使用@Before、@After等注解指定通知類型。
      2. 定義切點:
        使用@Pointcut注解定義切點表達式,指定哪些方法會被攔截。
      3. 生成代理對象:
        Spring容器在初始化時,根據切面和切點生成代理對象。
        如果目標類實現了接口,使用JDK動態代理;否則使用CGLIB動態代理。
      4. 執行通知:
        當目標方法被調用時,代理對象會根據切點表達式判斷是否需要攔截。
        如果需要攔截,則按照通知類型(如前置通知、后置通知)執行通知邏輯。

      三、展示一下

      3.1 引入依賴

      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
      </dependency>
      
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aspects</artifactId>
      </dependency>
      
      <dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjrt</artifactId>
      </dependency>
      

      3.2 定義切面類

      @Aspect // 封裝切面關注點的模塊,比如日志記錄
      @Component
      public class LoggingAspect {
      
      
          // 切點,通過表達式匹配連接點  // todo: 實際替換為自己想要切面的方法。
          @Pointcut("execution(* org.example.tao.service.impl.UserServiceImpl.getAllUsers(..))")
          public void loggingPointCut() {}
      
          // 前置通知,作用于連接點
          @Before("loggingPointCut()")
          public void logBefore() {
              System.out.println("方法執行前的日志記錄");
          }
      
          @AfterReturning(pointcut = "loggingPointCut()", returning = "result")
          public void logAfterReturning(Object result) {
              System.out.println("方法返回后的日志記錄,返回值:" + result);
          }
      
          @AfterThrowing(pointcut = "loggingPointCut()", throwing = "exception")
          public void logAfterThrowing(Exception exception) {
              System.out.println("方法拋出異常后的日志記錄,異常:" + exception.getMessage());
          }
      
          @After("loggingPointCut()")
          public void logAfter() {
              System.out.println("方法執行后的日志記錄");
          }
      
          @Around("loggingPointCut()")
          public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
              Signature signature = joinPoint.getSignature();
              System.out.println("環繞日志開始,方法名:" + signature.getName());
              long start = System.currentTimeMillis();
              Object result = joinPoint.proceed(); // 執行目標方法
              long elapsedTime = System.currentTimeMillis() - start;
              System.out.println("環繞日志結束,耗時:" + elapsedTime + "ms");
              return result;
          }
      
      }
      
      

      3.3 驗證

      啟動程序后,調用連接點方法,便會執行方法。

      posted @ 2025-03-20 00:08  帥氣的濤啊  閱讀(65)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产三级精品福利久久| 日产精品99久久久久久| 欧美日韩国产综合草草| 欧美一区二区三区欧美日韩亚洲| 老子午夜精品888无码不卡| 性做久久久久久久久| 国产日韩精品一区在线不卡| 97香蕉碰碰人妻国产欧美| 成人久久精品国产亚洲av| 国产suv精品一区二区四| 中文字幕日韩人妻一区| 激情综合五月| 天美传媒mv免费观看完整| 精品无码老熟妇magnet| 精品无码久久久久久久动漫| 在线看片免费人成视频久网| 婷婷久久综合九色综合88| 2021国产成人精品久久| 日日碰狠狠躁久久躁96avv| 无码人妻一区二区三区在线视频| 国产又爽又黄又刺激的视频| 精品一区二区av天堂| 日韩女同一区二区三区久久| 精品中文人妻中文字幕| 亚洲国产精品成人综合色| 日本少妇被黑人xxxxx| 视频一区二区不中文字幕| 中文字幕久久国产精品| 国产成人午夜福利精品| 国产av丝袜熟女一二三| 一区二区丝袜美腿视频| 大屁股国产白浆一二区| 临颍县| 99精品国产一区在线看| 东京热人妻丝袜无码AV一二三区观 | 国产剧情91精品蜜臀一区| 日本午夜精品一区二区三区电影| 成人一区二区不卡国产| 国产亚洲一区二区三不卡| 亚洲精品成人7777在线观看| 色偷偷女人的天堂亚洲网|