扫码阅读
手机扫码阅读

Spring Boot 中的 AOP,到底是 JDK 动态代理还是 Cglib 动态代理?

101 2024-11-05

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:Spring Boot 中的 AOP,到底是 JDK 动态代理还是 Cglib 动态代理?
文章来源:
江南一点雨
扫码关注公众号
文章摘要

抽奖活动通知

周六举办了一个送书活动,中奖率较高,建议大家参与尝试运气。

正文摘要

1. Spring AOP的实现

Spring AOP底层通过动态代理实现,主要有两种方式:基于JDK的动态代理与基于Cglib的动态代理。前者需要代理对象有接口,后者则不需要。

在Spring中,如果代理的对象有接口,则默认使用JDK动态代理;没有接口,则使用Cglib动态代理。这一策略在最新版的Spring中依然适用。

2. Spring Boot中的动态代理

Spring Boot在处理动态代理问题上与Spring略有不同。在Spring Boot 2.0之前,开发者可以通过配置文件中的 spring.aop.proxy-target-class 属性来指定使用JDK代理还是Cglib代理。如果没有配置或设置为false,将使用JDK代理;如果设置为true,则使用Cglib代理。

从Spring Boot 2.0开始,如果开发者没有进行配置,默认情况下使用Cglib代理。这表示Spring Boot 2.0之后首选了Cglib动态代理。

3. 实践验证

通过创建一个简单的Spring Boot项目并运行,验证了默认情况下Spring Boot使用的是Cglib代理。通过在配置文件中添加 spring.aop.proxy-target-class=false,可以切换到使用JDK动态代理。

4. 小结

在Spring框架中,AOP会根据是否存在接口来选择使用JDK动态代理还是Cglib动态代理。而在Spring Boot中,2.0版本之前的行为与Spring相同,2.0版本及之后则默认使用Cglib代理,除非开发者通过配置指定使用JDK代理。

想要了解更多内容?

查看原文:Spring Boot 中的 AOP,到底是 JDK 动态代理还是 Cglib 动态代理?
文章来源:
江南一点雨
扫码关注公众号