首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SpringAOP原理

SpringAOP原理

原创
作者头像
用户12010535
发布2026-01-26 19:20:50
发布2026-01-26 19:20:50
1560
举报

Spring AOP是面试高频,下面将从Spring AOP原理,覆盖核心概念、底层实现、执行流程、代理选择逻辑,不啰嗦但足够深入。

一、Spring AOP原理

1、Spring AOP是什么

Spring AOP 是基于动态代理的切面编程框架,用于在不修改业务代码的前提下,对方法进行增强(如日志、事务、权限)。

核心思想:将横切逻辑(如日志)从业务逻辑中抽离

在运行期通过代理对象自动织入增强逻辑

2、Spring AOP核心概念

  • 切面(Aspect):横切逻辑的集合(如 LogAspect)
  • 切点(Pointcut):匹配哪些类、哪些方法需要增强(如 execution (* com..*(..)))
  • 通知(Advice):具体增强逻辑(Before / After / Around / AfterReturning / AfterThrowing)
  • 目标对象(Target):被代理的业务对象
  • 代理对象(Proxy):Spring 生成的增强后的对象

3、Spring AOP 底层实现原理(核心)

Spring AOP 底层依赖 动态代理,有两种方式:

1. JDK 动态代理

  • 基于接口
  • 使用 Proxy.newProxyInstance() 生成代理对象
  • 要求目标类必须实现接口

2. CGLIB 动态代理

  • 基于继承
  • 通过生成目标类的子类实现代理
  • 目标类可以不实现接口

3. Spring 如何选择代理?

源码逻辑(DefaultAopProxyFactory):

  • 如果目标类是接口 → JDK 代理
  • 如果目标类不是接口 → CGLIB 代理
  • 如果强制设置 proxyTargetClass=true → 一律 CGLIB

4、Spring AOP 执行流程

Spring AOP 的执行流程可以分为 3 大阶段:解析(启动时)→ 创建代理(Bean初始化时) → 调用(运行时)

阶段 1:解析(启动时)

Spring 启动时会扫描所有 @Aspect 类:

  • 解析 @Pointcut 切点表达式
  • @Before/@After 等注解解析为 Advisor(切点 + 通知)
  • 保存到容器中

阶段 2:创建代理(Bean 初始化时)

Spring 使用 BeanPostProcessor 在 Bean 初始化后:

  • 判断该 Bean 是否匹配任何切点
  • 如果匹配 → 创建代理对象替换原 Bean

阶段 3:调用(运行时)

当你调用代理对象的方法时:

  • 进入 InvocationHandler.invoke()(JDK)或 MethodInterceptor.intercept()(CGLIB)
  • Spring 会:
    1. 获取该方法匹配的所有通知
    2. 按顺序执行通知(责任链模式)
    3. 最后执行目标方法

Spring AOP 原理流程图

图是deepseek生成
图是deepseek生成

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Spring AOP原理
    • 1、Spring AOP是什么
    • 2、Spring AOP核心概念
    • 3、Spring AOP 底层实现原理(核心)
      • 1. JDK 动态代理
      • 2. CGLIB 动态代理
      • 3. Spring 如何选择代理?
    • 4、Spring AOP 执行流程
      • 阶段 1:解析(启动时)
    • 阶段 2:创建代理(Bean 初始化时)
    • 阶段 3:调用(运行时)
    • Spring AOP 原理流程图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档