SpringBoot/Spring AOP默认动态代理方式实例详解
- Spring 5.x中AOP默认依旧使用JDK动态代理
- SpringBoot 2.x开始,AOP为了解决使用JDK动态代理可能导致的类型转换异常,而使用CGLIB。
- 在SpringBoot 2.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() { } }
再增加一个类不实现任何接口
@Service public class CustomNoImpl { public void hello() { } }
然后启动,可以ICustomService和CustomNoImpl看出AOP的代理使用的是CGLIB的动态代理
然后我们通过application.properties配置将代理默认设置为JDK代理。
spring.aop.proxy-target-class=false
然后启动调试发现,CustomNoImpl因为没有实现接口,所以使用的是CGLIB生成的代理,而
customService有接口实现,所以使用JDK的动态代理
总结:
JDK动态代理基于接口(必须声明接口并接口),CGLIB基于子类(可以只定义类)
到此这篇关于SpringBoot/Spring AOP默认动态代理方式的文章就介绍到这了,更多相关Spring AOP默认动态代理方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
详解springboot+mybatis-plue实现内置的CRUD使用详情
这篇文章主要介绍了详解springboot+mybatis-plue实现内置的CRUD使用详情,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-07-07深入理解SpringMVC中央调度器DispatcherServlet
这篇文章主要介绍了SpringMVC核心之中央调度器DispatcherServlet的相关知识,包括SpringMVC请求处理过程及SrpingMVC容器和spring IOC容器关系,需要的朋友可以参考下2022-05-05SpringBoot 基于 MongoTemplate 的工具类过程详解
MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种,这篇文章主要介绍了SpringBoot基于MongoTemplate的工具类,需要的朋友可以参考下2023-09-09IntelliJ IDEA里找不到javax.servlet的jar包的解决方法
这篇文章主要介绍了IntelliJ IDEA里找不到javax.servlet的jar包的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-09-09
最新评论