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

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

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

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

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

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

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

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

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

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

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

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

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

相关推荐
-曾牛2 小时前
Java面试:Spring及Spring Cloud技术深度剖析
java·spring·spring cloud·面试·springboot·javaee·面经
冬天的雪20083 小时前
springboot war包tomcat中运行报错,启动过滤器异常,一个或多个筛选器启动失败。
spring boot·tomcat·firefox
电商api接口开发3 小时前
ASP.NET MVC 入门与提高指南八
后端·asp.net·mvc
橘猫云计算机设计3 小时前
springboot基于推荐算法的景点推荐系统(源码+lw+部署文档+讲解),源码可白嫖!
java·spring boot·后端·毕业设计·推荐算法
维基框架3 小时前
Spring Boot Jpa封装快速构建Specification、OrderBy、Pageable的查询条件
java·spring boot
等什么君!4 小时前
学习springboot-条件化配置@Conditional(条件注解)
java·spring boot·学习
qq_3841368445 小时前
Mybatis中的一级二级缓存扫盲
java·spring·oracle
武昌库里写JAVA6 小时前
【iview】icon样式
java·开发语言·spring boot·学习·课程设计
颇有几分姿色6 小时前
Spring Boot 实现多种来源的 Zip 多层目录打包下载(本地文件&HTTP混合)
java·spring boot·后端
计算机毕设指导69 小时前
基于Springboot旅游网站系统【附源码】
java·开发语言·spring boot·后端·mysql·spring·旅游