Spring——AOP工作流程
AOP就是代理模式的开发简化
1.Spring容器启动
因为AOP是要将通知类作为一个bean对象交给spring进行管理的,还有经过通知类被增强的类。
此时还没有创建bean对象
2.读取所有切面配置中的切入点
在下面这段代码中,定义了两个切入点,但是只有一个被使用了,只会读取被使用的那个。
@Component
@Aspect
public class MyAdvice {@Pointcut("execution(void org.example.dao.BookDao.save())")public void ptx(){}@Pointcut("execution(void org.example.dao.BookDao.update())")public void pt(){}@Before("pt()")public void method(){System.out.println(System.currentTimeMillis());}
}
3.初始化bean,判定bean对应类中的方法是否匹配到任意切入点
这里的匹配是指一个即将被创建bean对象的类身上是否有一个方法是需要被增强的,比如说下图的这个BookDaoImpl有一个@Repository注解,所以它会原本被创建一个bean对象交给spring管理。但是现在这个类中的update()方法已经在通知类当中作为了一个切入点


匹配失败的话,就创建一个原始对象
匹配成功的话,会创建原始对象(目标对象)的代理对象,在上面也就是BookDao的代理对象
匹配成功说明有切入点需要进行增强,此时会运行代理对象的方法,也就是原始方法的增强版本。这里采用的技术是动态代理。代理就可以做到增强。
spring的AOP内部就是使用代理进行实现的。
4.获取bean执行方法
获取bean,调用方法并执行,完成操作
获取的bean是代理对象时,会根据代理对象的运行模式运行原始方法与被增强的内容来完成操作。
5.查看容器中的对象是不是一个代理对象
getclass():获取对象的运行时对象的类
使用下列输出语句

当一个目标对象的方法没有被增强的时候,输出如下,此时的bean对象就是原始对象。

当一个目标对象的方法被增强以后,输出如下,此时的bean对象就是原始对象的代理对象
相关文章:
Spring——AOP工作流程
AOP就是代理模式的开发简化 1.Spring容器启动 因为AOP是要将通知类作为一个bean对象交给spring进行管理的,还有经过通知类被增强的类。 此时还没有创建bean对象 2.读取所有切面配置中的切入点 在下面这段代码中,定义了两个切入点,但是只…...
c++11多线程之condition_variable、wait()、notify_one()、notify_all()的使用。
系列文章目录 文章目录系列文章目录前言一、基本概念1.1 std::condition_variable1.2 wait()函数1.2.1 wait()带第二个参数1.2.2 wait()不带第二个参数1.2.3 当其他线程用notify_one()或notify_all()1.3 notify函数二、代码实例总结前言 C11多线程&…...
skywalking扩展实现 —— 监控数据的动态上报
把标题名整高大上一些,来掩盖需求的奇葩。 0. 目录1. 需求背景2. 需求描述3. 优势4. 实现4.1 扩展点4.2 配置项5. 优化6. 提醒7. 补充 - 关于微服务8. 参考1. 需求背景 过去一段时间,接手了一个迭代了数年的"基于微服务架构"搭建的产品。 自…...
【GoF 23】23种设计模式与OOP七大原则概述
1. 什么是GoF 23? GoF 23也就是23种设计模式。1995年GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,一共收录了23种设计模式,从此梳理了软件设计模式领…...
Java 日期时间
Java 日期时间是 Java 标准库中一个非常重要的部分,它提供了丰富的 API 来处理日期、时间以及日期时间。在 Java 应用程序中,我们经常需要处理日期时间相关的操作,例如计算两个日期之间的差、将日期时间转换为不同的时区等。在本篇文章中&…...
Face Forgery Suvery
文章目录Face ForgeryFace Forgery classAttribute ManipulationExpression SwapIdentity SwapEntire Face SynthesisFace Forgery DetectionLow-levelOn the Detection of Digital Face Manipulation(CVPR2020)High-levelProtecting World Leaders Against Deep FakesDetectin…...
案例学习--016 消息队列作用和意义
简介MQ全称为Message Queue, 是一种分布式应用程序的的通信方法,它是消费-生产者模型的一个典型的代表,producer往消息队列中不断写入消息,而另一端consumer则可以读取或者订阅队列中的消息。主要产品有:ActiveMQ、RocketMQ、Rabb…...
【MySQL】MySQL的锁机制
目录 概述 MyISAM 表锁 InnoDB行锁 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制(避免争抢)。 在数据库中,除传统的 计算资源(如 CPU、RAM、I/O 等)的争用以外,数据也是一种供许多用户共…...
HTML 背景
一个富有美感的背景会让站点看上去更加高级、更有吸引力。本篇为大家来的是 HTML 背景相关内容。 背景(Backgrounds) <body> 拥有两个配置背景的标签。背景可以是颜色或者图像。 背景颜色(Bgcolor) 背景颜色属性将背景设…...
Lombok
文章目录简介原理安装常用Getter、SetterToStringEqualsAndHashCodeNonNullNoArgsConstructor、RequiredArgsConstructor、AllArgsConstructorDATABuilderLogvalCleanup简介 Project Lombok is a java library that automatically plugs into your editor and build tools, spi…...
Koa源码学习
前言 koa是一个非常流行的Node.js http框架。本文我们来学习下它的使用和相关源码 来自官网的介绍: Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。…...
一种延迟加载自定义元素的方法
您可能实际上并不需要所有这些;通常有一个更简单的方法。如果有意使用,此处显示的技术可能仍然对您的工具集有用。 为了保持一致性,我们希望我们的自动加载器也成为一个自定义元素——这也意味着我们可以通过 HTML 轻松配置它。但首先&#…...
Pytho经典面试题荟萃:第一期
目录 一、面试题 二、参考答案 解释器和编译器的区别 解释器 编译器 Python 的解释过程 Python 内存管理 Python 内存分配 引用计数 垃圾回收 其他内存管理技术 多重继承 多重继承带来的问题 命名冲突 菱形继承问题 解决多重继承带来的问题 方法重写 调用 su…...
01背包问题(大彻大悟版)
背包问题身为一个非常经典的动态规划问题,理清思路很重要,在经过多次观看y总视频和b站解析,加上CSDN的文章辅助,我终于从很多不理解到大彻大悟,下面是我对于背包问题思路的总结,有问题的话欢迎指出。谈到背…...
【麒麟服务器操作系统忘记开机密码怎么办?---银河麒麟服务器操作系统更改用户密码】
银河麒麟服务器操作系统更改用户密码 1.启动主机进入 grub 菜单,如图 1.1 以最新版本 Kylin-Server-10-SP2-x86-Release-Build09-20210524 为例。 图 1.1 grub 菜单 2 编辑 kernel 2.1按下”e”输入,输入用户名和密码(root/Kylin123123&…...
华为OD机试(20222023)考点分类
字符串,数组,集合操作 题库分值序号题目考点 or 实现Old1001敏感字段加密字符串,数组,集合操作Old1002IPv4地址转换成整数字符串,数组,集合操作Old1006字符串分割字符串,数组,集合操作Old1007...
初级篇 3 - HTML 或 CSS 文件中不懂的标签属性详解
目录一、遇到的不懂的标签属性详解1、meta 标签的 http-equiv 属性(元标签)二、遇到的 CSS 不懂的属性详解vertical-align三、如何规避 HTML 自动换行 - 脱离文档流配置属性 display: inline-block理解 inline、inline-block、blockinline总结:四、导航栏自动弹出子…...
【C语言】每日刷题 —— 牛客语法篇(4)
🚀🚀前言 大家好,继续更新专栏 c_牛客,不出意外的话每天更新十道题,难度也是从易到难,自己复习的同时也希望能帮助到大家,题目答案会根据我所学到的知识提供最优解。 🏡个人主页&am…...
HashMap ConcurrentHashMap介绍
目录 HashMap 数据结构 重要成员变量 Jdk7-扩容死锁分析 单线程扩容 多线程扩容 Jdk8-扩容 ConcurrentHashMap 数据结构 并发安全控制 源码原理分析 重要成员变量 协助扩容helpTransfer 扩容transfer 总结 CopyOnWrite机制 源码原理 HashMap 数据结构 数组…...
C++语法规则3(C++面向对象)
多态 C多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数; 形成多态必须具备三个条件: 必须存在继承关系;继承关系必须有同名虚函数(其中虚函数是在基类中使用关键字 virtual 声明的函数&#…...
二分查找算法:中间值左偏还是右偏?
还记得吗?我们在前面探讨了区间的选择和主循环的停止判断条件,但是没有提到 中间索引位置的计算公式 middle(st, ed)。当区间的长度是奇数时,中间索引只有一个位置 mid (st ed) / 2,而当区间长度是偶数时,中间索引就…...
告别“盲调”:用OllyDbg 2.x手把手破解TraceMe,从GetDlgItemTextA断点到NOP修改实战
逆向工程实战:用OllyDbg 2.x破解TraceMe的关键技术与思维训练 逆向工程就像一场精心设计的数字解谜游戏,而OllyDbg则是我们手中的万能钥匙。本文将带你深入TraceMe这个经典逆向练习的内部世界,从API断点设置到关键跳转修改,完整呈…...
别再傻傻分不清了!VB、VBS、VBA到底该学哪个?给新手的选型指南
VB、VBS与VBA终极选型指南:从零开始做出明智选择 每次打开Excel想要自动化处理数据时,是否对着宏录制按钮犹豫不决?当需要批量重命名几百个文件时,是否在批处理和VBS之间举棋不定?本文将带您深入理解这三种"VB系…...
3分钟掌握B站缓存视频转换:m4s-converter让你的视频永久保存
3分钟掌握B站缓存视频转换:m4s-converter让你的视频永久保存 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的…...
CANN/ops-nn LpLoss算子
LpLoss 【免费下载链接】ops-nn 本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-nn 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atl…...
目标检测:YOLOv12训练自己的数据集,手把手教学一看就会
目录 1. 环境配置 2. 数据集 2.1 网上搜索公开数据集 2.1.1 搜索引擎 2.1.2 Kaggle 2.1.3 Roboflow 2.2 自制数据集 2.2.1 Labelimg安装 2.2.2 Labelimg使用 2.3 数据集转换及划分 2.3.1 数据集VOC格式转yolo格式 2.3.2 数据集划分 3. 训练模型 3.1 创建data.yam…...
智慧树刷课插件:3分钟实现自动播放,彻底告别手动刷课烦恼!
智慧树刷课插件:3分钟实现自动播放,彻底告别手动刷课烦恼! 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台繁琐的手…...
5G与4G LTE互操作:无缝衔接,共筑通信新生态
5G与4G LTE互操作:无缝衔接,共筑通信新生态 在移动通信技术日新月异的今天,5G作为新一代通信技术,正逐步融入我们的生活,与4G LTE形成互补共存的局面。5G与4G LTE之间的互操作,不仅关乎用户体验的连续性&am…...
高速ADC前端变压器相位不平衡分析与优化方案
1. 宽带A/D转换器前端设计中的变压器配置挑战在高速数据采集系统中,变压器作为A/D转换器的前端接口器件,承担着信号隔离和单端转差分的关键任务。然而,实际工程中我们常常遇到一个棘手的问题:当输入信号频率超过100MHz时ÿ…...
TTS听觉校对法:技术写作质量提升的工程实践指南
1. 为什么我们需要“听”自己的文字:一个被忽视的校对革命作为一名写了十几年技术文档和博客的老兵,我敢说,最让我头疼的不是构思,也不是码字,而是最后那一步——校对。你肯定也经历过:一封精心撰写的邮件发…...
