蜗牛学苑 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 基础。

相关推荐
水云桐程序员1 小时前
从零开发软件的步骤,软件开发从零到完成应该怎么做?
笔记·学习·软件构建·个人开发
David猪大卫1 小时前
【Linux修炼】环境变量、进程地址空间
linux·c语言·经验分享·笔记·学习·ubuntu·centos
叼烟扛炮2 小时前
Linux 学习笔记(五十六):IO 多路复用初探——select 的“三宗罪”
linux·服务器·数据库·笔记·学习·php
叼烟扛炮9 小时前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php
Z21-X17 小时前
云原生运维学习笔记:容器技术的演进、底层原理与 Docker 全生命周期管理
运维·笔记·学习·云原生
Rabitebla1 天前
【Linux 底层原理】进程(十):进程等待详解---从僵尸进程到 wait、waitpid 与 status
linux·c++·笔记·学习·visual studio
无心水1 天前
24、系统架构师论文写作专题 核心考点与学习笔记
笔记·学习·系统架构·架构师·安全架构·软考架构师·软考系统架构设计师
蒸蒸yyyyzwd1 天前
邓明 Agent 系统面试-意图识别学习笔记
笔记·学习
La Pulga1 天前
【FreeRTOS源码学习笔记】空闲任务与阻塞延时
笔记·mcu·学习·嵌入式·freertos·实时操作系统
蒸蒸yyyyzwd1 天前
秋招学习笔记 day106
笔记·学习