jdk动态代理和cglib动态代理

简介: 只有聪明人才能看见的简介~( ̄▽ ̄~)~

JDK动态代理是使用反射机制生成实现了代理接口的匿名类,cglib是使用字节码处理框架asm,加载代理对象类的class文件后通过修改字节码生成子类。

因此jdk动态代理基于接口,要求被代理对象必须实现接口,cglib动态代理基于继承,被代理对象类不能为final。

两者相比,jdk创建代理对象效率高;cglib代理对象执行效率高。

Spring 5.x 中 AOP 依旧默认使用 JDK 动态代理。SpringBoot 2.x 开始,为了解决使用 JDK 动态代理可能导致的类型转化异常默认使用 CGLIB。可使用配置修改。


为什么JDK动态代理可能导致类型转化异常?

https://www.cnblogs.com/super-admin/p/9653274.html

如上代码,获取bean后,为了使用进行强转。但是由于底层为JDK动态代理,我们获取的类为代理类,而代理类和我们想要的目标类实现了共同的接口但不是同一个类。而cglib就不会发生这个问题。上图的解决方案是强转为IService接口。这也体现了为什么应该面向接口编程,和依赖倒置原则。

目录
相关文章
|
29天前
|
Java API 开发者
Jdk动态代理为啥不能代理Class?
该文章主要介绍了JDK动态代理的原理以及为何JDK动态代理不能代理Class。
Jdk动态代理为啥不能代理Class?
|
27天前
|
Java
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
这篇文章是Spring5框架的实战教程,深入讲解了AOP的基本概念、如何利用动态代理实现AOP,特别是通过JDK动态代理机制在不修改源代码的情况下为业务逻辑添加新功能,降低代码耦合度,并通过具体代码示例演示了JDK动态代理的实现过程。
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
|
11天前
|
开发者 C# 容器
【独家揭秘】当WPF邂逅DirectX:看这两个技术如何联手打造令人惊艳的高性能图形渲染体验,从环境搭建到代码实践,一步步教你成为图形编程高手
【8月更文挑战第31天】本文通过代码示例详细介绍了如何在WPF应用中集成DirectX以实现高性能图形渲染。首先创建WPF项目并使用SharpDX作为桥梁,然后在XAML中定义承载DirectX内容的容器。接着,通过C#代码初始化DirectX环境,设置渲染逻辑,并在WPF窗口中绘制图形。此方法适用于从简单2D到复杂3D场景的各种图形处理需求,为WPF开发者提供了高性能图形渲染的技术支持和实践指导。
33 0
|
19天前
|
设计模式 Java C++
揭秘!JDK动态代理VS CGLIB:一场关于Java代理界的‘宫心计’,你站哪队?
【8月更文挑战第24天】Java 动态代理是一种设计模式,允许在不改动原类的基础上通过代理类扩展功能。主要实现方式包括 JDK 动态代理和 CGLIB。前者基于接口,利用反射机制在运行时创建代理类;后者采用继承方式并通过字节码技术生成子类实现类的代理。两者在实现机制、性能及适用场景上有明显差异。JDK 动态代理适用于有接口的场景,而 CGLIB 更适合代理未实现接口的类,尽管性能更优但存在一些限制。开发者可根据需求选择合适的代理方式。
50 0
|
3月前
|
设计模式 Java 程序员
java动态代理(JDK和cglib)
java动态代理(JDK和cglib)
23 0
|
3月前
|
设计模式 Java 程序员
java动态代理(JDK和cglib)
java动态代理(JDK和cglib)
32 0
|
3月前
|
缓存 Java Maven
JDK 动态代理
JDK 动态代理
19 0
|
3月前
|
Java Spring
深入解析Spring源码,揭示JDK动态代理的工作原理。
深入解析Spring源码,揭示JDK动态代理的工作原理。
38 0
|
24天前
|
Java 关系型数据库 MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【8月更文挑战第19天】在Linux上搭建Java Web应用环境,需安装JDK 1.8、Tomcat及MariaDB。本指南详述了使用apt-get安装OpenJDK 1.8的方法,并验证其版本。接着下载与解压Tomcat至`/usr/local/`目录,并启动服务。最后,通过apt-get安装MariaDB,设置基本安全配置。完成这些步骤后,即可验证各组件的状态,为部署Java Web应用打下基础。
36 1
|
27天前
|
Oracle Java 关系型数据库
Mac安装JDK1.8
Mac安装JDK1.8
257 4