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.xdnf.cn/news/1548405.html

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

相关文章

Pencils Protocol 即将登录各大 CEX,依旧看好 $DAPP

近期,Scroll生态头部DeFi协议Pencils Protocol迎来了系列重磅市场进展。自9月18日开始,$DAPP通证分别在Tonkensoft、Bounce以及Coresky等平台陆续开启了IDO,并且在短期内售罄。同时在通证售卖完成后,DAPP 通证又在9月27日陆续登录…

​极狐阿尔法 S5安全至上,北汽极狐打造移动防护堡垒

在新能源汽车的广阔舞台上,北汽极狐以其卓越的品质和创新的技术,不断书写着辉煌篇章。其中,极狐阿尔法 S5更是以其强大的性能、豪华的配置和亲民的价格,成为了众多消费者关注的焦点。 北汽极狐的品质追求 北汽极狐一直以来都将品…

Mysql建表遇到重复的列名

调用接口拿到的数据rows,有很多行,每一行又有很多key-value pair,一开始代码是遍历第一行,每一对key-value,key作为建表时的列名,value的类型决定了该列在mysql中的类型 之后出现问题,表能建&am…

cve 漏洞排查流程

1、打开CVE连接 确认漏洞jar包以及版本信息 https://gitee.com/opengauss/security/issues/IASNOA?fromproject-issue 2、通过命令导出对应jar包的依赖树 并导出到目标结果文件中 mvn dependency:tree -Dincludes:gson > gson.result.txt 3、过滤test引用…

Python PyQt5 在frame中生成多个QLabel控件和彻底销毁QLabel控件

文章目录 步骤 1: 创建主窗口和布局步骤 2: 添加QLabel到QFrame步骤 3: 销毁QLabel示例代码 在PyQt5中,在QFrame或任何其他容器控件中生成多个QLabel控件并通过一个标志位或方法来彻底销毁这些QLabel控件是相对直接的操作。以下是一个简单的示例,展示了如…

【Midjourney中文版:AI绘画新纪元,赋能创意设计与开发】

在数字艺术与设计领域,创新与效率并重。Midjourney中文版,作为一款强大的AI绘画工具,正引领我们步入一个全新的创意时代。它不仅简化了复杂的绘画流程,更以智能算法为驱动力,为开发者、设计师及所有创意工作者带来了前…

如何在postman中传入文件参数

如何在postman中传入文件参数 打开Body中的form-data,将请求所需的参数写到Key中,点击右侧的按钮选择File,在Value列中即可上传本地文件。

并发编程---线程与进程

业务场景:小明去理发店理发。 小明去理发店理发,完成理发需要吹,剪,洗、理的过程。由这个场景我们引用进程和线程这两个 概念。 一.进程 1.什么是进程 进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是…

js删除emoji表情问题

emoji标签占位两个 &#xff0c;直接删除后一位会出现乱码符&#xff1b; 判断是否是emoji function isEmoji(char) {let code char.charCodeAt(0);return code>55296&&code<57343 } // 使用方法&#xff0c;传入单字符 console.log(isEmoji(1)); // false con…

算法复杂度之时间复杂度

一 . 数据结构前言 1.1 数据结构 数据结构(Data structure) 是计算机存储&#xff0c;组织数据的方式&#xff0c;指互相之间存在一种或多种特定关系的数据元素的集合。没有一种单一的数据结构对所有用途都有用&#xff0c;所以要学习各式各样的数据结构&#xff0c;如&#…

pilz皮尔兹PSSuniversal分散控制平台 Dezentrale Steuerungsplattform 手测

pilz皮尔兹PSSuniversal分散控制平台 Dezentrale Steuerungsplattform 手测

【科研小小白】理解图片容量、像素、尺寸、分辨率各自含义、 像素、分辨率与实际尺寸之间的转换关系

理解图片容量、像素、尺寸、分辨率各自含义&#xff1a; 通过之前的学习&#xff0c;我们知道了图片有这4个参数&#xff0c;下面给大家总结一这下4个参数的具体含义。 1、容量&#xff08;占内存&#xff09;&#xff1a;是指图像文件的存贮空间&#xff0c;也就是文件的大小…

华为OD机试 - 获取最多食物 - 拓扑排序、动态规划(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

计算机毕业设计 基于Python的广东旅游数据分析系统的设计与实现 Python+Django+Vue Python爬虫 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

职场基本功:情绪管理的行动指南(前置情绪管理)

文章目录 引言情绪管理的目标情绪产生的阶段前置情绪管理避免情绪失控的技巧案例分析引言 成熟的职场人,必备的五项技能: 管理自己的情绪:职场需要你的行为是可控的,只有情绪是稳定的,其他人才能顺利地跟你展开协作。称赞他人:赞赏能让你获得一个友好的交流环境求助他人…

为什么这款智能在线派单软件成为行业首选?

智能在线派单软件通过自动化任务分配等提升效率&#xff0c;ZohoDesk因其全方位服务管理、智能分配、定制性强、数据分析等功能&#xff0c;成为企业优选。实例涵盖物流、家政、维修、医疗等行业&#xff0c;提高效率和客户满意度。 一、智能在线派单软件有什么功能 在深入探讨…

GPT理论

1.GPT发展 Transformer是一个用作翻译任务的模型&#xff0c;谷歌出品。 GPT全称 lmproving Language Understanding by Generative Pre-Training&#xff0c;用预训练语言理解模型。OPENAI出品。 BERT全称Pre-training of Deep BidirectionalTransformers for Language Unde…

C++入门day5-面向对象编程(终)

C入门day4-面向对象编程&#xff08;下&#xff09;-CSDN博客 本节是我们面向对象内容的最终篇章&#xff0c;不是说我们的C就学到这里。如果有一些面向对象的基础知识没有讲到&#xff0c;后面会发布在知识点补充专栏&#xff0c;全都是干货满满的。 https://blog.csdn.net/u…

阿博图书馆管理:SpringBoot实战指南

第二章 开发技术介绍此次B/S结构、Java技术以及mysql数据库是该阿博图书馆管理系统的主要开发技术&#xff0c;然后对系统的整体设计、数据库设计、功能模块设计、系统页面设计以及系统程序设计进行了详细的研究与规划。 2.1 系统开发平台 在该阿博图书馆管理系统中&#xff0c…

OJ在线评测系统 代码沙箱优化模版方法模式 使用与有规范的流程 并且执行流程可以复用

代码沙箱优化模版方法模式 上次我们代码沙箱的docker实现和原生实现 我们可以使用模版方法设计模式去优化我们的代码 我们原生的java实现代码沙箱和docker实现代码沙箱是有更多重复点的 比如说把文件 收集文件 进行校验 我们要用模版方法设计模式 定义一套通用的执行流程 让…