AOP-代理实现

三种代理实现

1 JDK动态代理实现-基于接口代理
2 CGLIB动态代理实现-基于类代理
3 AspectJ 适配实现

在这里插入图片描述
在这里插入图片描述
为什么Proxy.newProxyInstance 会生成新的字节码?
创建代理类:
Proxy.newProxyInstance 首先会检查缓存中是否有已存在的代理类字节码。
如果没有,则会生成一个新的字节码文件,并将其加载到 JVM 中。
字节码生成过程:
类定义:生成一个新的类,这个类实现了传入的所有接口。
方法重写:对于每个接口的方法,代理类都会生成一个方法实现,这些方法内部会调用 InvocationHandler.invoke 方法。
方法调用:当代理对象的方法被调用时,实际上会调用 InvocationHandler.invoke 方法,从而实现方法的拦截和增强。

为什么Java动态代理无法满足AOP的需要?

接口限制:Java动态代理要求目标对象必须实现一个或多个接口。如果目标对象是一个具体的类,并且没有实现任何接口,那么就无法直接使用Java动态代理。在这种情况下,需要使用其他技术,如CGLIB,它可以为目标类创建子类来实现动态代理。
为什么Spring推荐AspectJ注解?

  1. 更简洁的代码
    减少配置:使用 AspectJ 注解可以减少 XML 配置文件中的配置量,使得代码更加简洁易读。传统的 Spring AOP 需要在 XML 文件中配置大量的 aop:config 和 aop:pointcut 元素,而使用 AspectJ 注解可以直接在 Java 类中声明切面、切入点和通知。
  2. 更强大的切入点表达式
    丰富的表达式:AspectJ 提供了比 Spring AOP 更强大的切入点表达式语言,支持更复杂的匹配规则,比如基于方法签名、类层次结构、异常等条件的匹配。这对于实现更细粒度的控制是非常有用的。
  3. 编译期织入
    编译期织入:AspectJ 支持编译期织入(Compile-time Weaving),这意味着可以在编译阶段就将切面代码织入到目标类中。这样做的好处是可以提高运行时的性能,因为切面逻辑已经内联到了业务代码中,减少了运行时的代理调用开销。
    类装载期织入:此外,AspectJ 还支持类装载期织入(Classloading-time Weaving),可以在应用程序启动时进行织入操作,这也是一种较为灵活的方式。
  4. 更好的可维护性和可扩展性
    分离关注点:使用 AspectJ 注解可以更好地实现关注点的分离,将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来,集中在一个地方进行管理和维护。
    易于扩展:由于 AspectJ 注解直接在 Java 类中声明,因此更容易扩展和复用切面逻辑。
  5. 社区支持和技术成熟度
    广泛支持:AspectJ 是一个成熟的 AOP 框架,拥有广泛的社区支持和丰富的文档资源。Spring 采用与 AspectJ 相同的注解风格,使得开发者可以利用 AspectJ 的强大功能,同时也保持了与 Spring 生态系统的良好集成。
  6. 无缝集成
    Spring 集成:Spring 与 AspectJ 的集成非常紧密,Spring 不仅支持 AspectJ 的注解,还提供了与 Spring 容器的良好集成,使得开发者可以方便地在 Spring 应用中使用 AspectJ 的功能。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计 C语言学习辅导网站的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

14.安卓逆向-frida基础-编写hook脚本2

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。 工…

16. C++ TinyWebServer项目总结(16. 服务器调制、调试和测试)

主要包括: 使用 tcpdump 抓包;使用 gdb 调试器;使用压力测试工具,模拟现实世界中的高并发请求,测试服务器在高压状态下的稳定性。 最大文件描述符数 Linux 对应用进程能打开的最大文件描述符数量有两个层次的限制&a…

node的版本管理工具volta

安装方式 # mac curl https://get.volta.sh | bash # Windows Installation winget install Volta.Volta切换版本 volta install node指定版本根据项目固定node和包管理器版本和 该命令会在package.json生成volta的配置,volta会自动读取项目的该配置来决定node的…

【STM32】TCP/IP通信协议--LWIP内存管理

五、LWIP内存管理 1.什么是内存管理? (1)内存管理,是指软件运行时对计算机内存资源的分配的使用的技术,其主要目的是如何高效、快速的分配,并且在适当的时候释放和回收内存资源(就比如C语言当…

安全的价值:构建现代企业的基础

物理安全对于组织来说并不是事后才考虑的问题:它是关键的基础设施。零售商、医疗保健提供商、市政当局、学校和所有其他类型的组织都依赖安全系统来保障其人员和场所的安全。 随着安全技术能力的不断发展,许多组织正在以更广泛的视角看待他们的投资&am…

SQL学习1

24.9.28学习目录 一.数据库1.SQL语句基础2.匹配条件 一.数据库 对于嵌入式的数据库,其使用的是SQLite这种小型数据库; 在ubuntu中的下载方法 //字符界面 sudo apt-get install sqlite3//图形界面 sudo apt-get install sqlitemanSQLite特点&#xff1a…

ACL 2023--MetaAdapt: 通过元学习实现领域自适应的少量样本虚假信息检测

https://github.com/Yueeeeeeee/MetaAdapt 随着社交媒体上出现的新话题(例如COVID-19)成为虚假信息传播的来源,克服原始训练领域(即源领域)与这些目标领域之间的分布变化,仍然是虚假信息检测中的一项复杂任…

5分钟精通Excel在go中的使用

一些简单操作可以在官方文档中找到,应该足够无经验的朋友们入门 介绍 - 《Excelize v2.2 中文文档》 - 书栈网 BookStack 这里贴一个中文版的链接(以excelize库为例,相对其他库来说,体验很不错),不过要注…

PWA(Progressive web APPs,渐进式 Web 应用): manifest.json、 Service Worker

文章目录 引言I 什么是 PWA功能特性技术上分为三个部分安装应用II Web 应用清单将Web 应用清单文件链接到站点manifest.json字段说明III Service Worker( 缓存管理)IV 结合构建工具让项目支持 PWA应用使用插件vite-plugin-pwaworkbox-webpack-plugin插件扩展知识将 PWA 作为脱机…

紫光 FPGA固化RAM位置的操作流程

1. 前提条件:需要已经编译出一个功能完整的没有时序违例的版本出来; 2. 将RAM导出至txt文件: 这个过程需要几分钟,耐心等待一下。 等待提示成功就可以进行下一步操作了。 3. 将【2】中的txt文件中的内容全选复制粘贴到pcf文件的…

物体实例分割,机器人拾取

物体实例分割是计算机视觉领域的一个关键任务,它旨在从图像中分割出每个独立物体,并且为每个物体实例提供一个独特的标识。这一任务不仅识别出图像中的物体,还能区分出多个同类物体的不同实例,例如在一张桌子上摆放的多个相同的杯…

AI直播巅峰!2024年AI无人直播app排行榜领先者揭晓!

AI直播巅峰!2024年AI无人直播app排行榜领先者揭晓! 在科技日新月异的今天,AI技术正以惊人的速度渗透到我们生活的每一个角落,其中,AI无人直播app的兴起无疑成为了直播行业的一股革新力量。随着技术的不断成熟和市场的…

瓶子类型检测系统源码分享

瓶子类型检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

论文阅读:A Generalization of Transformer Networks to Graphs

论文阅读:A Generalization of Transformer Networks to Graphs 论文地址1 摘要2 贡献Graph TransformerOn Graph Sparsity(图稀疏)On Positional Encodings(位置编码)3 Graph Transformer Architecture(架…

关于Fake Location定位,运动世界校园问题

不好意思,之前那个文章其实是很早之前的,不知道为什么审核了很久一直没有通过,然后前几周莫名其妙点了一下重新发布,竟然发布成功了,这个方法已经失效了,要可以稳定,我建议是买一台root的手机&a…

给Ubuntu虚拟机设置静态IP地址(固定IP)

查看 为Ubuntu虚拟机配置静态IP地址(固定IP)的方法经过亲自测试,已被证实有效。 这里你记得网关就可以了,等下要用 查看配置前的网络信息 ifconfig 查看网关 route -n 配置 配置网络文件 cd /etc/netplan/ ls 查看自己的文件的名…

o1规划能力首测!已超越语言模型范畴,preview终于赢mini一回

克小西 发自 凹非寺 量子位 | 公众号 QbitAI o1-preview终于赢过了mini一次! 亚利桑那州立大学的最新研究表明,o1-preview在规划任务上,表现显著优于o1-mini。 相比于传统模型的优势更是碾压级别,在超难任务上的准确率比Llama3.…

C++第五讲(1):STL--string--各个函数的使用方法

C第五讲:STL--string 1.STL简介2.string类2.1string类的常见构造2.1.1重点1: string()2.1.2重点2:string(const string& str)2.1.3使用3:string(const string& str, size_t pos, size_t len npos)…