首页 > 其他分享 >Spring AOP 原理(摘要: 原创出处 jianshu.com/p/e18fd44964eb 「莫那一鲁道」)

Spring AOP 原理(摘要: 原创出处 jianshu.com/p/e18fd44964eb 「莫那一鲁道」)

时间:2024-06-08 09:13:08浏览次数:18  
标签:外层 拦截器 创建 Spring 调用 代理 一鲁道 AOP

AOP 的设计:
每个 Bean 都会被 JDK 或者 Cglib 代理。取决于是否有接口。
每个 Bean 会有多个“方法拦截器”。注意:拦截器分为两层,外层由 Spring 内核控制流程,内层拦截器是用户设置,也就是 AOP。
当代理方法被调用时,先经过外层拦截器,外层拦截器根据方法的各种信息判断该方法应该执行哪些“内层拦截器”。内层拦截器的设计就是职责连的设计。
第一:代理的创建;
第二:代理的调用。

代理的创建(按步骤):
首先,需要创建代理工厂,代理工厂需要 3 个重要的信息:
拦截器数组,目标对象接口数组,目标对象。
创建代理工厂时,默认会在拦截器数组尾部再增加一个默认拦截器 —— 用于最终的调用目标方法。
当调用 getProxy 方法的时候,会根据接口数量大余 0 条件返回一个代理对象(JDK or Cglib)。
注意:创建代理对象时,同时会创建一个外层拦截器,这个拦截器就是 Spring 内核的拦截器。用于控制整个 AOP 的流程。

代理的调用
当对代理对象进行调用时,就会触发外层拦截器。
外层拦截器根据代理配置信息,创建内层拦截器链。创建的过程中,会根据表达式判断当前拦截是否匹配这个拦截器。而这个拦截器链设计模式就是责任链模式。
当整个链条执行到最后时,就会触发创建代理时那个尾部的默认拦截器,从而调用目标方法。最后返回。
来张不是很标准的 UML 图:

调用过程,来张流程图:

标签:外层,拦截器,创建,Spring,调用,代理,一鲁道,AOP
From: https://www.cnblogs.com/velloLei/p/18238197

相关文章

  • JAVA计算机毕业设计基于的剧本杀管理系统(附源码+springboot+开题+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:在当今社会,剧本杀已经成为一种备受欢迎的休闲娱乐方式。随着其市场需求的不断增长,剧本杀店铺如雨后春笋般涌现。然而,随着业务规模的扩大,剧本杀店铺的......
  • 【粉丝福利社】Spring Cloud 微服务快速上手(文末送书-进行中)
    ......
  • ShardingSphere + Mysql,实现分库分表、读写分离,并整合 SpringBoot
    软件版本Docker:26.1.3Mysql:8.4.0ShardingSphere:5.5.0 分库分表1.Docker创建两个Mysqlservices:mysql:image:mysql:8.4.0ports:-"3306:3306"environment:MYSQL_ROOT_PASSWORD:abc123volumes:-./data:/var/lib/mysql......
  • Spring AI 第二讲 之 Chat Model API 第八节Anthropic 3 Chat
    AnthropicClaude是一系列基础人工智能模型,可用于各种应用。对于开发人员和企业来说,您可以利用API访问,直接在Anthropic的人工智能基础架构之上进行构建。SpringAI支持用于同步和流式文本生成的Anthropic消息API。Anthropic的Claude模型也可通过AmazonBedrock......
  • 【计算机毕设文章】基于spring boot的体育场馆设施预约系统
    摘要时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,体育场馆设施预约系统当然不能排除在外。体育场馆设施预约系统是在实际应用和软件工程的开发原理之上,运用java语言以及SpringBoot框架进行开发。首先要进行需求分析,分析出体......
  • 门面模式Api网关(SpringCloudGateway)
    1.前言        当前通过Eureka、Nacos解决了服务注册和服务发现问题,使用SpringCloudLoadBalance解决了负载均衡的需求,同时借助OpenFeign实现了远程调用。然而,现有的微服务接口都直接对外暴露,容易被外部访问。为保障对外服务的安全性,通常在服务端实现的微服务接口会......
  • vue + springboot 实现Excel模板文件下载
    1、后端实现1.创建用于映射模板的实体类@DatapublicclassSysUserTo{@Pattern(regexp="^(\\w+([-.][A-Za-z0-9]+)*){3,18}@\\w+([-.][A-Za-z0-9]+)*\\.\\w+([-.][A-Za-z0-9]+)*$",message="邮箱格式有误")@Size(max=50,message="邮箱超出50长度&q......
  • Redis-12-SpringBoot集成Redis哨兵模式
    Redis哨兵的配置,参考我这篇文章:Redis-5-高可用1.背景网上搜半天没搜到份好用的,自己整理了下方便以后复制,基于springboot2.6.13。lettucecommons-pool22.集成2.1导入pom<!--spring-redis--><dependency><groupId>org.springframewor......
  • 【源码】Spring Data JPA原理解析之事务注册原理
     SpringDataJPA系列1、SpringBoot集成JPA及基本使用2、SpringDataJPACriteria查询、部分字段查询3、SpringDataJPA数据批量插入、批量更新真的用对了吗4、SpringDataJPA的一对一、LazyInitializationException异常、一对多、多对多操作5、SpringDataJPA自定义......
  • 基于SpringBoot+Vue的网上花店系统设计与实现(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......