蜗牛学苑 Java 智能体学习 Day33|AOP 面向切面编程、日志技术思维导图复盘

一、思维导图整体知识结构梳理

一、日志技术

  1. SpringBoot 日志
    • 概念:记录程序运行信息,用于排查问题
    • 门面:SLF4J
    • 实现:Logback
    • 日志级别 (由低→高):trace 追踪、debug 调试、info 普通信息、warn 警告、error 错误
    • 使用方式
      1. 原始写法:LoggerFactory 获取 Logger 对象
      2. Lombok 简化:@Slf4j 注解,直接 log.xxx ()
    • yml 配置
    • System.out.println:不推荐项目使用
  2. 日志体系
    • 日志门面 (接口):SLF4J(主流,SpringBoot 首选)、JCL (Commons‑Logging)、老项目门面
    • 日志实现 (日志框架,真正打印日志):Logback(SpringBoot 默认实现)、Log4j
    • 搭配关系:SLF4J 门面 + Logback 实现;优势:解耦,切换日志框架无需修改业务代码

二、AOP 面向切面编程

  1. 方法增强
    • 概念:在不修改原有业务方法源码的前提下,增加额外功能;原有核心业务代码保持不变
    • 前置增强:方法执行之前;后置增强:方法正常执行完毕之后;异常增强:方法抛出异常执行;最终增强:无论成功失败都执行;环绕增强:完全控制原方法执行
    • 底层实现技术:动态代理(目标类要有接口‑JDK 动态代理;目标类无接口‑CGLIB 动态代理,生成子类)
    • Spring 实现方式:AOP 面向切面编程;高频场景:日志、事务、权限、性能计时
  2. AOP 核心术语
    • 连接点 JoinPoint:可以被增强的所有方法
    • 切入点 Pointcut:真正被增强的方法
    • 通知 (Advice):额外增强的功能代码;5 种通知:@Before 前置通知、@AfterReturning 后置通知、@AfterThrowing 异常通知、@After 最终通知、@Around 环绕通知 (最强)
    • 切面 Aspect = 切入点 + 通知
    • 执行顺序:环绕前置→前置通知→目标方法→后置通知→最终通知→环绕后置
    • 应用场景:日志记录、事务、权限校验、计时
    • OOP 和 AOP 区别:OOP 面向对象:实现核心业务功能;AOP 面向切面:抽取通用公共功能;典型场景:接口日志打印、操作日志、事务控制、权限校验
  3. @Aspect 注解
    • 作用:标记该类为切面类;必须配合 @Component 将切面交给 spring 容器管理;@Pointcut:切入点表达式,指定哪些方法被增强
    • 常见错误:漏写 @Component,切面不生效
  4. 环绕通知 @Around
    • 参数:必须携带 ProceedingJoinPoint
    • proceed ():执行目标方法;执行顺序:前置代码→执行目标方法→后置代码;异常不捕获‑目标报错,切面不会运行后置代码
  5. @Around 环绕通知 VS 其他四种通知
    • 参数区别、执行控制权区别、返回值、能力对比
    • 环绕通知:可控制目标方法执行,全能;其余通知:单一时机执行

三、Spring 两大核心

  • IOC 控制反转:作用:对对象交由 spring 容器创建管理;注解:@Component、@Service
  • AOP 面向切面编程:作用:方法增强,不修改源码添加功能;注解:@Aspect、@Around、@Before

四、Spring AOP 通知类型

  1. @Around 环绕通知:目标方法前、后均可执行,功能最强,可以控制目标方法是否执行
  2. @Before 前置通知:在目标方法之前执行
  3. @After 最终通知:目标方法之后执行,有无异常,都会执行
  4. @AfterReturning 返回通知:目标方法正常结束后执行
  5. @AfterThrowing 异常通知:目标方法抛出异常后执行

五、向上转型 & 向下转型(回忆)

  1. 向上转型(多态):子类对象赋值给父类引用;自动转换,无需强制;只能调用父类方法;不能调用子类独有的方法;实现多态,代码扩展性强
  2. 向下转型:父类引用转成子类类型;需要强制类型转换;可以调用子类独有方法

六、多态

  • 定位:面向对象三大特征之一:封装、继承、多态
  • 必要条件:存在继承 / 实现关系、存在方法重写、父类引用指向子类对象
  • 优点:代码易维护、通用;实现代码解耦,扩展性强
  • 弊端:不能直接使用子类独有的功能;向下转型时,类型转换异常 ClassCastException;解决方案:转型前使用 instanceof 判断对象真实类型
  • 核心口诀:编译看左边,运行看右边

七、切入点表达式 execution

  1. 语法格式:execution (返回值类型 包名。方法名 (参数))
  2. 示例详解:8 种完整写法,分别匹配不同包、类、方法、参数范围
  3. 逻辑运算符:&& 并且、|| 或者、! 非
  4. @Pointcut 注解
    • 作用:抽取重复的切入点表达式;一处定义,多处复用;后期修改改一处即可
    • 使用步骤:定义无返回值空方法;加上 @Pointcut;在通知注解引用该方法

二、思维导图制作意图

本次思维导图梳理 SpringBoot 日志技术与 AOP 切面编程两大核心板块,厘清 SLF4J 门面 + Logback 实现的日志体系;吃透 AOP 动态代理原理、五大通知类型、execution 切入点表达式语法、@Pointcut 复用技巧;顺带回顾 Java 多态、向上向下转型底层知识,打通 AOP 动态代理底层原理。将日志打印作为 AOP 实战场景,为后续使用 AOP 做操作日志、权限拦截打下基础。

三、当日学习总结

今天学习了 SpringBoot 日志框架的配置、分级打印以及 Lombok 简化日志开发;深入学习 AOP 面向切面编程,掌握 5 种通知、execution 切入点表达式书写、@Pointcut 切入点抽取复用;理解 AOP 基于动态代理实现方法无侵入式增强,以后就可以用 AOP 完成接口日志记录、方法计时、权限校验等通用功能;同时复习了多态与类型转换知识点,补齐 AOP 底层代理相关的 Java 基础。

相关推荐
我是你的开心果7781 小时前
ai全栈软件开发day21(第四阶段喽)
人工智能·学习
网络工程小王2 小时前
【LLM开发实验】FastAPI 学习笔记
数据库·笔记·学习·mysql·fastapi
醉舞经阁半卷书12 小时前
量化交易基础之python库学习
学习
youm20032 小时前
【学习笔记】认识NoSQL——非关系型数据库
笔记·学习·nosql
传奇开心果编程3 小时前
【Rust入门知识点学与练】第11课:HashMap 键值对集合
开发语言·学习·rust
约克33 小时前
商水约克中央空调商用工程的行业洞察与落地要点
学习
王的宝库4 小时前
Linux 性能优化入门
linux·学习
公爵爱学习4 小时前
无人机定点飞行-介绍
开发语言·图像处理·python·学习·线性回归·无人机
浔溺4 小时前
al+大数据每日学习笔记33
大数据·笔记·学习