SpringBoot和Spring AOP默认动态代理方式
创始人
2025-05-28 09:49:37
0

SpringBoot和Spring AOP默认动态代理方式

目录

  • SpringBoot和Spring AOP默认动态代理方式
  • 1. springboot 2.x 及以上版本
  • 2. Springboot 1.x
  • 3.SpringBoot 2.x 为何默认使用 Cglib

  • Spring 5.x中AOP默认依旧使用JDK动态代理
  • SpringBoot 2.x开始,AOP为了解决使用JDK动态代理可能导致的类型转换异常,而使用CGLIB。
  • 在SpringBoot2.x中,AOP如果需要替换使用JDK动态代理可以通过配置项spring.aop.proxy-target-class=false来进行修改,proxyTargetClass配置已无效。

1. springboot 2.x 及以上版本

在 SpringBoot 2.x AOP中会默认使用Cglib来实现,但是Spring5中默认还是使用jdk动态代理。Spring AOP 默认使用 JDK 动态代理,如果对象没有实现接口,则使用 CGLIB 代理。当然,也可以强制使用 CGLIB 代理。

在 SpringBoot 中,通过AopAutoConfiguration来自动装配AOP.
在这里插入图片描述

2. Springboot 1.x

Springboot 1.x AOP默认还是使用 JDK 动态代理的
在这里插入图片描述

3.SpringBoot 2.x 为何默认使用 Cglib

因为JDK 动态代理是基于接口的,代理生成的对象只能赋值给接口变量。JDK动态代理使用Proxy.newProxyInstance()创建代理实现类,然而第二个参数就需要接口类型,如果没有接口类型就会报错。

Proxy.newProxyInstance(iCustomerInstance.getClass().getClassLoader(), iCustomerInstance.getClass().getInterfaces(), this);

而 CGLIB 就不存在这个问题。因为 CGLIB 是通过生成子类来实现的,代理对象无论是赋值给接口还是实现类,这两者都是代理对象的父类。

所以在2.x版本以上,将 AOP 默认实现改为了 CGLIB代理。

新建一个接口

public interface ICustomService {void printf();
}

新建一个ICustomService的实现类

@Service
public class CustomServiceImpl implements ICustomService {public void printf() {}
}

再增加一个类不实现任何接口
然后启动,可以debug看到ICustomService和CustomNoImpl看出AOP的代理使用的是CGLIB的动态代理
在这里插入图片描述
然后我们通过application.properties配置将代理默认设置为JDK代理。

spring.aop.proxy-target-class=false

然后启动调试发现,CustomNoImpl因为没有实现接口,所以使用的是CGLIB生成的代理,而customService有接口实现,所以使用JDK的动态代理

在这里插入图片描述

相关内容

热门资讯

官方通报泾县游客被打事件处理结... 6月8日,安徽泾县联合调查组发布情况通报: 2025年6月6日,游客蔡某通过网络反映其6月1日到泾县...
618为什么有人宁愿买iPho... 相信不少网友都有类似的疑惑,那就是每年618的时候,苹果手机大跳水,销量表现总是会领先不少国产手机。...
《政务数据共享条例》出台 给老... 近日,《政务数据共享条例》正式出台,对政务数据的目录管理、共享使用、平台支撑等工作进行部署。目的是推...
成都警方通报一辆汽车与一辆自行... 2025年6月8日,成都市公安局交通管理局发布警情通报:
美媒:美关税政策将令世界更贫穷... 参考消息网6月8日报道美国《纽约时报》网站6月5日发表题为《关税使世界更贫穷、更危险》的文章,作者为...
政策“组合拳”持续显效,房地产... 从降低购房门槛到减轻房贷利息负担,从出台“好房子”规范标准到加快消化存量商品房……今年以来,多部门联...
两高联合印发《关于完善对海事法... 近日,最高人民法院、最高人民检察院联合印发《关于完善对海事法院法律监督机制的通知》(下称《通知》)。...
抄中国作业的越南,计划生育政策... 抄中国作业的越南,也放开计划生育政策了,但可能仍然会重蹈覆辙。 这些年来,中国是摸着鹰酱过河,越南是...
布克今夏会得到2年1.498亿... 6月8日,根据记者Marc Stein的报道,预计德文-布克今夏会得到太阳开出的提前续约合同。 布...
ST路通:因公章管理内控缺陷、... 金融界6月8日消息,ST路通及相关责任人近日收到江苏证监局下发的警示函,公司存在公章管理内部控制缺陷...