AOP基础

黑马程序员JavaWeb开发教程

文章目录

一、AOP概述

  • AOP:Aspect Oriented Propragramming(面向切面变成、面向方面编程)其实就是面向特定方法编程
  • 场景:
    • 案例部分功能运行比较慢,定位执行耗时比较长的业务方法,此时需要统计每一个业务方法的执行耗时。
      • 记录案例开始前的时间
      • 运行案例
      • 记录案例执行完成后的时间,计算案例执行时间
  • 实现
    • 动态代理是面向切面变成最主流的视线。而SpringAOP是Spring框架的高级技术,旨在管理bean对象的过程中,主要通过底层的动态代理机制,对特定的方法进行编程。

二、AOP快速入门

2.1 步骤

  1. 导入依赖:在pom.xml中导入AOP的依赖

    复制代码
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-aop</artifactId>
         </dependency>
  2. 编写AOP程序:针对与特定方法根据业务需要进行编程

    package com.itheima.mytlias.aop;

    import lombok.extern.slf4j.Slf4j;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.springframework.stereotype.Component;

    @Slf4j
    @Component
    @Aspect
    public class TimeAspect {
    //指定当前方法可以作用在哪些方法上(com.itheima.mytlias.service)所有包的所有接口和方法上
    @Around("execution(* com.itheima.mytlias.service..(..))")
    public Object recordTime(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
    //1.记录方法开始时间
    long begin = System.currentTimeMillis();
    //2. 调用原始方法
    Object object = proceedingJoinPoint.proceed();//调用原始方法
    //3. 记录方法结束时间
    long end = System.currentTimeMillis();
    //4. 输出方法运行耗时
    log.info(proceedingJoinPoint.getSignature() + "执行耗时:{}ms", end - begin);
    return object;

    复制代码
     }

    }

  3. 测试

  • 首先需要运行程序,之后打开前端页面执行一个功能就可以看到日志中打印出来的耗时提醒

2.2 AOP的使用场景

  1. 记录曹组日志
  2. 权限控制
  3. 事务管理

2.3 AOP的优势

  1. 无代码侵入
  2. 减少重复代码
  3. 提高开发效率
  4. 维护方便

三、AOP核心概念

3.1 AOP核心概念

  1. 连接点:JoinPoint,可以被AOP控制的方法(暗含方法执行时的相关信息)
  2. 通知:Advice,指哪些重复的逻辑,也就是共性功能(最终体现为一个方法);也就是入门程序中的recordTime 方法
  3. 切入点:PointCut,匹配连接点的条件,通知会在切入点方法执行时被应用(实际被AOP控制的方法)
  4. 切面:Aspect,描述通知与切入点大的对应关系(通知切入点)
  5. 目标对象:Target,通知所应用的对象

3.2 AOP执行流程

相关推荐
JavaDog程序狗5 分钟前
【java】easypoi导出excel单元格,填充动态下拉列
java·spring boot·excel
hu_yuchen5 分钟前
C++:智能指针
开发语言·c++
Java中文社群12 分钟前
国内首个「混合推理模型」Qwen3深夜开源,盘点它的N种对接方式!
java·人工智能·后端
掉鱼的猫20 分钟前
qwen3 惊喜发布,用 ollama + solon ai (java) 尝个鲜
java·openai·deepseek
类似不类似22 分钟前
快速配置linux远程开发-go语言
开发语言·后端·golang
永进,23 分钟前
C++中的智能指针
开发语言·c++
GuGuStudy28 分钟前
这都是什么多线程知识
java
Bob999828 分钟前
Amlogic S905L3系列盒子 ROM DIY相关
java·javascript·数据仓库·vscode·eclipse·tomcat·vim
带刺的坐椅38 分钟前
qwen3 惊喜发布,用 ollama + solon ai (java) 尝个鲜
java·spring·solon·solon-ai·qwen3
香蕉可乐荷包蛋1 小时前
Python面试问题
开发语言·python·面试