如何选择Spring AOP的动态代理?JDK与CGLIB的适用场景

news/2025/2/3 2:08:36 标签: spring boot, spring cloud, spring, 微服务, 后端

Spring AOP在默认情况下使用的动态代理方式,可以比作是餐厅里的“智能服务员助手”。

Spring AOP默认提供了两种动态代理方式:JDK动态代理CGLIB代理。其选择取决于被代理的对象是否实现了接口,以及配置的代理模式。默认情况下,Spring会优先使用JDK动态代理。如果目标类没有实现任何接口,Spring才会使用CGLIB代理。

智能服务员助手(JDK动态代理):

• 这位助手专门服务于那些已经明确告诉它自己有哪些“技能”(即实现了哪些接口)的服务员。

• 当顾客需要这些特定的服务时,智能服务员助手会拦截请求,并调用真正的服务员来完成工作,同时还可以在服务前后添加一些额外的服务,比如推荐菜品或收集顾客反馈。

• 但这位助手有个限制,它只能服务于那些明确声明了自己技能的服务员(即目标对象必须实现至少一个接口)。

而另一种动态代理方式,我们可以称之为“全能服务员培训师”(CGLIB动态代理)

• 这位培训师更加灵活,它不需要服务员提前声明自己的技能

• 它通过观察和模仿服务员的工作方式(即继承目标类),来提供相同的服务

• 因此,即使服务员没有声明任何技能(即目标类没有实现接口),全能服务员培训师也能提供服务。

• 但全能服务员培训师也有个限制,它无法模仿那些无法被继承的服务员(即final类或final方法)。

简单来说,Spring AOP默认使用的JDK动态代理适用于那些实现了接口的目标对象,而CGLIB动态代理则适用于那些没有实现接口的目标对象。两者在应用场景和限制上有所不同,开发者可以根据实际需求选择合适的代理方式。


http://www.niftyadmin.cn/n/5840425.html

相关文章

2.攻防世界PHP2及知识点

进入题目页面如下 意思是你能访问这个网站吗? ctrlu、F12查看源码,什么都没有发现 用kali中的dirsearch扫描根目录 命令如下,根据题目提示以及需要查看源码,扫描以php、phps、html为后缀的文件 dirsearch -u http://61.147.17…

C#属性和字段(访问修饰符)

不同点逻辑性/灵活性存储性访问性使用范围安全性属性(Property)源于字段,对字段的扩展,逻辑字段并不占用实际的内存可以被其他类访问对接收的数据范围做限定,外部使用增加了数据的安全性字段(Field)不经过逻辑处理占用内存的空间及位置大部分字段不能直接被访问内存使用不安全 …

C++ strcpy和strcat讲解

目录 一. strcpy 代码演示: 二.strcat 代码演示: 一. strcpy 使⽤字符数组可以存放字符串,但是字符数组能否直接赋值呢? ⽐如: char arr1[] "abcdef"; char arr2[20] {0}; arr2 arr1;//这样这节赋值可…

89,[5]攻防世界 web Web_php_include

进入靶场 <?php // 显示当前 PHP 文件的源代码&#xff0c;方便调试或展示代码内容 show_source(__FILE__);// 从 URL 的查询字符串中获取名为 hello 的参数值&#xff0c;并将其输出到页面上 // 例如&#xff0c;当访问的 URL 为 "example.php?helloworld" 时&…

MATLAB中savefig函数用法

目录 语法 说明 示例 将当前图窗保存到 FIG 文件 将多个图窗保存到 FIG 文件 使用 compact 选项保存图窗 savefig函数的功能是将图窗和内容保存到 FIG 文件。 语法 savefig(filename) savefig(H,filename) savefig(H,filename,compact) 说明 savefig(filename) 将当前…

Unity3D仿星露谷物语开发26之创建场景控制管理器

1、目标 创建场景控制管理器&#xff0c;来加载和卸载场景&#xff0c;以实现场景之间的切换。 2、思路 Fade To Back是黑色的过渡场景&#xff0c;透明度逐渐变为1。 Fade To Transparent To Show Scene&#xff1a;黑色消失的过渡场景&#xff0c;透明度逐渐变为0. 事件触发…

Java小白入门教程:Object

目录 一、定义 二、作用 三、使用场景 四、语法以及示例 1、创建Object类型的对象 2、使用 toString()方法 3、使用 equals()方法 4、使用 hashCode()方法 5、使用 getClass()方法 6、使用 clone()方法 7、使用 finalize()方法 一、定义 在Java中&#xff0c; object…

No.7十六届蓝桥杯备战|单目操作符|getchar|putchar(C++)

单⽬操作符 前⾯介绍的操作符都是双⽬操作符&#xff0c;即有2个操作数。除此之外还有⼀些操作符只有⼀个操作数&#xff0c;被称为单⽬操作符。如 、–、(正)、-(负) 就是单⽬操作符。 和– 是⼀种⾃增的操作符&#xff0c;⼜分为前置和后置&#xff0c;–是⼀种⾃减的操作…