侧边栏壁纸
博主头像
Leokoの小破站博主等级

行动起来,活在当下

  • 累计撰写 14 篇文章
  • 累计创建 10 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Spring AOP 总结

Leoko
2023-05-09 / 0 评论 / 0 点赞 / 68 阅读 / 2609 字

前面两篇文章 Spring AOP 详解 Spring AOP(二)介绍了 Spring AOP 的原理和代理对象的执行过程,相信小伙伴都有一定收获,那么这篇文章就是来总结回顾一下 AOP 的重点知识和相关面试题。

1. AOP 概述

AOP 面向切面编程,英文全称是 Aspect Oriented Programming,它是 OOP 的补充。OOP 关注的核心是对象,AOP 的核心是切面(AspectAOP 可以在不修改功能代码本身的前提下,使用运行时动态代理的技术对已有代码逻辑增强。AOP 可以实现组件化、可插拔式的功能扩展,通过简单配置即可将功能增强到指定的切入点。

2. AOP 原理

AOP的底层设计是由运行时动态代理支撑,在 bean 的初始化流程中,借助 BeanPostProcessor 将原始的目标对象织入通知,生成代理对象。

AOP 在底层,借助 AnnotationAwareAspectJAutoProxyCreatorbean 的初始化流程,postProcessAfterInitialization 方法中将目标对象包装为代理对象。这里面涉及到几个核心步骤:

  1. 检查当前初始化的 bean 是否可以被 AOP 代理(检查是否有匹配的增强器);

  2. 如果存在,则根据当前初始化的 bean 所属类有无实现接口,以及 AOP 的全局配置,决定使用哪种代理方案;

  3. 将目标对象包装为 TargetSource ,并以此为原型生成代理对象。

3. jdk动态代理和Cglib动态代理的对比

  • jdk 动态代理要求被代理的对象所属类至少实现一个接口,它是 jdk 内置的机制。

  • Cglib 动态代理无此限制,使用字节码增强技术实现,需要依赖第三方 Cglib

  • jdk 动态代理的代理对象创建速度快,执行速度慢;Cglib 动态代理的代理对象创建速度慢,执行速度快

4. AOP 术语

  • Target 目标对象:被代理的原始对象。

  • Proxy 代理对象:目标对象被织入通知后的产物就是代理对象。

  • JoinPoint 连接点:目标对象的所属类中,定义的所有方法均为连接点。

  • Pointcut 切入点:被切面拦截 / 增强的连接点(切入点一定是连接点,连接点不一定是切入点)。

  • Advice 通知:增强的逻辑 / 代码,也即拦截到目标对象的连接点之后要做的事情。

  • Aspect 切面:切入点 + 通知。

0

评论区