当前位置: 首页 > news >正文

Spring—AOP

AOP是在不惊动原有的代码的基础上对功能进行增强操作

连接点:JoinPoint,可以被AOP控制的方法

通知:Advice,增强的逻辑,共性功能

切入点:PointCut,匹配连接点的条件,表明连接点中哪些方法是真正需要被增强的

切面:Aspect,描述通知与切入点对应关系的

😃通知有五种类型:

@Before前置通知

@After后置通知

@AfterReturning返回后通知

@AfterThrowing抛出异常后通知

@Around环绕通知

顾名思义,就是分别在原始切入点方法之前,之后,返回后,抛出异常后,还有把原始切入点方法放入通知中间执行的

😃动态代理实现AOP:
代理其实本质就是生成一个代理对象,这个代理对象和切入点有相同的方法,然后代理对象中的方法是根据需求进行增强过的,然后当调用切入点的方法时,不走切入点的方法,走代理对象增强过的方法,而怎么保证代理对象和切入点有着相同的方法呢,基于这个思路,代理它又分为jdk代理和cglib代理

  • jdk代理:是java自带的代理方法,主要采用了多态和反射的技术,它是让代理对象和目标类一起去实现一个共同的接口,这样就可以保证两者有相同的方法


    newProxyInstance方法的三个参数:
    • 第一个参数,类加载器
    • 第二个参数,接口集合,因为jdk代理需要目标对象实现接口
    • 第三个参数,一个函数式接口,实现增强方法逻辑,这个函数式接口也有三个参数:
      • 第一个参数,目标对象
      • 第二个参数,需要被增强的方法
      • 第三个参数,方法执行的参数

  • cglib代理:不是jdk自带的代理,需要导外部依赖,其底层是让代理类继承目标类,通过Enhancer.create获取代理对象

create方法的两个参数:

    • 第一个参数:目标类
    • 第二个参数:一个函数式接口,实现增强方法逻辑,这个函数式接口有四个参数:
      • 第一个参数,代理对象自己
      • 第二个参数,需要被增强的方法
      • 第三个参数,方法执行的参数
      • 第四个参数,MethodProxy,代理不走反射的关键

其实AOP的重点就是如何获取到目标类的原始方法,并把它放到特定的上下文环境下执行,对于这一点,jdk代理是采用反射,你看,我都反射了,我还拿不到你的原始方法?直接获取到Method类,再放入特定的上下文环境,也就是AOP通知,调用invoke方法即可。而cglib代理是怎么获得原始方法的呢,它的代理类是继承目标类的,那都直接继承目标类了,那不就可以直接通过super.的形式调用目标类的原始方法

😃spring如何选择代理方式:

Spring容器代理时,会有一个ProxyFactory类,这个类传入目标类对象和通知,里面有个boolean类型参数proxyTargetClass,这个如果设置为false,就会去检查目标类是否继承了接口,如果有,就用jdk代理,没有就cglib代理,如果为true,则不管有没有继承接口,都用cglib代理

😃一个方法被多个切面AOP了?

此时需要给切面@Order(1)标注顺序,越小优先级越高,如果没标注顺序,就会按照注册顺序进行AOP,此时的顺序是不可知的,是随机的

😃AOP什么时候失效?

  • 类中自调用方法,同一个类中A调用B方法,B方法的AOP不会生效
  • 调用内部类方法
  • 调用静态方法,静态方法不会被AOP
  • 调用final方法,final方法不会被AOP
  • 目标类不符合规则,如jdk代理时没继承接口,cglib代理时是final类

相关文章:

  • 济南国网数字化培训班学习笔记-第二组-3节-电网工程建设项目部门
  • Python爬虫实战:移动端逆向工具Fiddler经典案例
  • 4.24定时任务_Python
  • 删除elementplus的li标签中的一个class属性?
  • 强化学习核心原理及数学框架
  • Postman设置环境变量与Token
  • 操作系统进程管理笔记
  • 使用 VMware 安装一台 Linux 系统之Centos
  • 访问者模式:分离数据结构与操作的设计模式
  • 一种Spark程序运行指标的采集与任务诊断实现方式
  • win11什么都不动之后一段时间黑屏桌面无法显示,但鼠标仍可移动,得要熄屏之后才能进入的四种解决方法
  • MCP‌和LangGraph‌结合
  • Python 函数与模块
  • 开关量扫描处理(消抖)
  • Linux平台实现低延迟的RTSP、RTMP播放
  • Java技术体系的主要产品线详解
  • 专家系统的基本概念解析——基于《人工智能原理与方法》的深度拓展
  • 车载客流记录仪简介
  • 2025 年免费 Word 转 PDF 转换器有哪些?
  • 数据结构——二叉树,堆
  • 冯象|那“交出”后的崩溃,如撒旦坠落诸天
  • 中国经济“第一省会”广州,从传统商贸中心到直播电商第一城
  • 印度加大应对力度,吊销所有巴基斯坦公民签证
  • 国防部:希望美方不要有“受迫害妄想症”,总拿别人当借口
  • 临汾攻坚PM2.5:一座曾经“爆表”城市的空气治理探索
  • 独家丨前华金证券宏观首席秦泰加盟华福证券,任研究所副所长