当前位置: 首页 > article >正文

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

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

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

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

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

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

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

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

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

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

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

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

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


http://www.kler.cn/a/527563.html

相关文章:

  • HTML(快速入门)
  • 合并2个排序的链表
  • 「AI学习笔记」深度学习的起源与发展:从神经网络到大数据(二)
  • 一文讲解Java中的异常处理机制
  • qt-C++笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphicsRectItem的区别
  • 【张雪峰高考志愿填报】合集
  • python 语音识别
  • 如何在 Kafka 中实现自定义分区器
  • 27.Word:财务软件应用的书稿【10】
  • 数据结构与算法之二叉树: LeetCode LCP 10. 二叉树任务调度 (Ts版)
  • 记忆化搜索(5题)
  • 因果推断与机器学习—用机器学习解决因果推断问题
  • 为AI聊天工具添加一个知识系统 之80 详细设计之21 符号逻辑 之1
  • Contrastive Imitation Learning
  • 基于SpringCloud的广告系统设计与实现(四)
  • vue3项目中编写less
  • 华为Ascend产品
  • STM32CubeMX6.13.0打开后不显示界面,但是任务管理器显示该程序正在运行
  • 深入理解Flexbox:弹性盒子布局详解
  • OpenSource - 通过 system-design-101 掌握架构设计
  • git:恢复纯版本库
  • 机试题——考古学家
  • C语言实现库函数strlen
  • 2025年1月30日(任意截面、自定义截面梁的设置)
  • MYSQL--一条SQL执行的流程,分析MYSQL的架构
  • Privacy Eraser,电脑隐私的终极清除者