| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> SpringBoot/Spring AOP默认动态代理方式 -> 正文阅读 |
|
[Java知识库]SpringBoot/Spring AOP默认动态代理方式 |
1. springboot 2.x 及以上版本?????????在 SpringBoot 2.x AOP中会默认使用Cglib来实现,但是Spring5中默认还是使用jdk动态代理。Spring AOP 默认使用 JDK 动态代理,如果对象没有实现接口,则使用 CGLIB 代理。当然,也可以强制使用 CGLIB 代理。 在 SpringBoot 中,通过AopAutoConfiguration来自动装配AOP. 2. Springboot 1.xSpringboot 1.x AOP默认还是使用 JDK 动态代理的 ?3.SpringBoot 2.x 为何默认使用 Cglib? ? ? ? 因为JDK 动态代理是基于接口的,代理生成的对象只能赋值给接口变量。JDK动态代理使用Proxy.newProxyInstance()创建代理实现类,然而第二个参数就需要接口类型,如果没有接口类型就会报错。
而 CGLIB 就不存在这个问题。因为 CGLIB 是通过生成子类来实现的,代理对象无论是赋值给接口还是实现类,这两者都是代理对象的父类。 所以在2.x版本以上,将 AOP 默认实现改为了 CGLIB代理。 新建一个接口
新建一个ICustomService的实现类
再增加一个类不实现任何接口
然后启动,可以ICustomService和CustomNoImpl看出AOP的代理使用的是CGLIB的动态代理 然后我们通过application.properties配置将代理默认设置为JDK代理。
? ? 然后启动调试发现,CustomNoImpl因为没有实现接口,所以使用的是CGLIB生成的代理,而 customService有接口实现,所以使用JDK的动态代理 参考: SpringBoot2.x默认Cglib动态代理(1.x默认JDK动态代理)_HD243608836的博客-CSDN博客_springboot默认代理方式 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/10 18:31:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |