SpringAOP(1)-spring源码详解(六)

news2025/1/11 17:10:51

上篇文章说了spring监听器,监听event,先把事件全部存储在多播器,通过publicEvent来触发多播器发送事件,他可以通过代码注解,或者实现接口的方式来实现事件监听,达到解耦和异步的效果。

Spring监听器-spring源码详解(五)icon-default.png?t=M85Bhttps://blog.csdn.net/ke1ying/article/details/127780075

Aop要实现的是在我们原来的代码基础上进行一些包装,比如在方法执行前,方法抛出异常之后进行拦截处理,又叫增强处理。与前面ioc的一些后置处理器构造方法不同,aop主要是动态代理来实现的。

SpringAop是基于动态代理,当使用接口的时候是jdk动态代理实现,不是则是用cglib来实现。(cglb是通过asm开源框架动态修改底层字节码,修改需要被增强的.class)

Spring主要用到aspect切点解析,注解。

除了上面的@aspct来增强外,还可以通过实现interceptor的方式来做一些增强。

@Aspect,@Before,@after

拿到所有bean定义,是不是标记了@aspect,每个通知都会生成一个advisor。里面有advise

和pointcut。

那倒是所有advisors之后,pointcut然后matches创建动态proxy。

 

通过@EnableAspectJAutoProxy可以注册一个bean定义。

解析切面的第一步就是在postProcessorBeforeInstiation里。

 

 

 

 

创建动态代理AbstractAutoProxyCreator里的后置处理器。

判断是否直接跳过,跳过的规则是,判断是不是切面类,通知类,切点类,advice,pointcut,advisor等,如果是,则返回true。

当findCandidateAdvisors找不到的时候,会调用buildAspectJAdvisors方法解析所有的切面。

在这里会循环Object的bean定义,也就是拿到所有beanName,判断是不是aspect切面。

主要通过判断findAnnotation 是否标记aspect注解。

这里有个回调钩子方法,会把pointCut注解的忽略掉,没有则加到methods里面去。

这里会有一个sort排序,为什么排序呢,因为后面会根据责任链调用。

Around,before,after,afterReturning,afterTrowing。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/24991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jupyter介绍和安装使用

一. 前言: 最近,小熙发现了一个有意思的工具Jupyter notebook,刚上手熟悉了下,特此记录分享。 二. 简介: 简单介绍并说下用途: Jupyter Notebook是一款开源的web应用,支持markdown编辑&#…

Windows为什么使用广播机制更新信息?

很多 Windows 信息通知机制是基于广播消息,例如,DDE,WM_FONTCHANGE 消息和系统设置的修改等。 当我们知道,消息的广播可能导致系统由于某个窗口停止处理消息而导致整个系统停止时,为什么我们还是使用广播呢&#xff1f…

【解决】VSCode编写C++自定义头文件undefined reference异常问题

最近在使用VSCode编写C程序过程中,自定义一个 *.h 文件,其中包含了函数声明,在主函数中引入头文件后,调用头文件对应C文件中的方法,出现了undefined reference问题,这个主要是配置没有正确造成的&#xff0…

Git——分支(详细解释)

目录 一、概念 1.1 服务器运行模式 1.2 分支概念 1.3 分支的好处 二、分支相关操作 2.1 分支操作 2.2 查看当前分支 2.3 创建分支 2.4 切换分支 2.4.1 切换分支 2.4.2 修改代码并提交(完整过程) 三、合并分支 3.1 正常合并 3.2 冲突合并&#xff…

DGL学习笔记——第一章 图

提示:DGL用户指南学习中 文章目录一、关于图的基本概念?二、图、节点和边三、节点和边的特征四、从外部源创建图1、从Scipy稀疏矩阵中构建图示例2、从networkx中构建图示例3、从csv中构建图结构总结一、关于图的基本概念? 图是用以表示实体及…

【推荐系统学习笔记】-- 1、推荐系统架构

根本解决的问题:在信息过载的情况下,用户如何高效获取感兴趣的信息。 1 逻辑架构 推荐系统要处理的问题就可以被形式化地定义为:对于某个用户U(User),在特定场景C(Context)下&…

区块链 - 各个国家Web3的现状与趋势

​潜力博主推荐,点上面关注博主↑↑↑ 2022年,元宇宙、NFT 、GameFi、DAO、DeFi 等 Web3 时代的新生事物,正在彻底改写传统商业模式,重塑全球数字商业的版图,一个全新的数字时代正在开启。 美国、欧洲官方开始在 Web…

【构建ML驱动的应用程序】第 4 章 :获取初始数据集

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

C语言——指针初阶详解

🐒博客名:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 目录 1. 指针是什么 2. 指针和指针类型 2.1指针类型的第一个意义 2.2指针类型的第二个意义 3. 野指针 3.1 野指针成因 3.2 如何…

零基础自学javase黑马课程第十六天

零基础自学javase黑马课程第十六天 ✨欢迎关注🖱点赞🎀收藏⭐留言✒ 🔮本文由京与旧铺原创,csdn首发! 😘系列专栏:java学习 💻首发时间:🎞2022年11月21日&…

三菱FX3U——ST编程点动与自锁

通过赋值 : 操作符,可以控制元件的状态; Y0:1,使Y0得电, Y0:0,使Y0失电; Y0:TRUE,使Y0得电, Y0:FALSE,使Y0失电; Y2:M0,通过M0的状态来控制Y2; NOT 取反操作, 状态取反&#xff…

活动现场大屏幕互动系统(微信墙)修复版完美PHP源码,带完整素材包和详细使用文档

源码收集于网络,觉得不错,2022-11-18亲测了源码,顺手修复了原来的几处bug。网上的这个源码有个重大bug,就是后台系统配音没法上传音乐文件。我理了一下代码,修复了这个问题,现在后台可以分别给每个模块上传…

CTFHub技能树 Web-文件上传详解

文章目录0x01 无验证0x02 前端验证0x03 .htaccess0x04 MIME绕过0x05 00截断0x06 双写后缀0x07 文件头检查0x08 其他摘抄0x01 无验证 介绍&#xff1a;直接上传后缀是php的文件即可 文件上传 <?php eval($_POST[777]);?> 进行连接 查找flag 0x02 前端验证 介…

智慧住建解决方案-最新全套文件

智慧住建解决方案-最新全套文件一、建设背景目前智慧住建的信息化现状&#xff1a;1、系统重叠建设&#xff0c;标准规范不统一2、信息应用水平不均衡&#xff0c;资源共享待提升3、应用系统众多&#xff0c;用户操作体验不佳4、原有架构难以适应“互联网”的新要求二、总体设计…

计算机中的第三个伟大发明

本节我们学习了控制计算机跳转指令的第三个发明的由来&#xff0c;以及清除指令。并且展示了计算机的整体控制部分的布线图。 第三个发明 对于跳转指令&#xff0c;有时它会跳转&#xff0c;有时不会。跳或不跳只是两种可能性&#xff0c;所以只需要一个bit就可以确定哪一种会…

【Kubernetes快速实战】

K8S官网文档&#xff1a;https://kubernetes.io/zh/docs/home/ 文章目录前言一、K8S核心特性二、K8S集群安装1.安装K8S集群1、关闭防火墙2、关闭 selinux3、关闭 swap4、给三台机器分别设置主机名5、在 k8s‐master机器添加hosts&#xff0c;执行如下命令&#xff0c;ip需要修改…

全球最受欢迎的「数字游民」城市竟然是它?

相信你已经或多或少听说过「数字游民」这个词汇了。 「数字游民」译自英文词组Digital Nomad&#xff0c;是指那些没有办公室等固定工作场所&#xff0c;利用互联网从事远程工作&#xff0c;实现地域和时间的相对自由&#xff0c;在全球范围内移动生活的人群。 想想看&#x…

STM32实战总结:HAL之电机

电机基础知识参考&#xff1a; 51单片机外设篇&#xff1a;电机_路溪非溪的博客-CSDN博客 无刷电机和有刷电机 先详细了解有刷电机&#xff1a; 带你了解&#xff08;有刷&#xff09;电机工作原理_哔哩哔哩_bilibili 再详细了解无刷电机&#xff1a; 无刷直流电机工作原理_哔哩…

MySQL在centos上的安装

去mysql官网下载mysql 通过mysql官网的download界面&#xff0c;找到community server&#xff0c;然后选择对应linux版本下载对应的安装包 这里直接上链接 https://downloads.mysql.com/archives/community/ 可以通过cat /etc/centos-release命令找到当前centos对应的版本 下…

[附源码]java毕业设计小区供暖收费管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…