1 Star 0 Fork 54

aimerwhy / Java-Interview-Advanced

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
28.md 1.25 KB
一键复制 编辑 原始数据 按行查看 历史

28、了解过cglib动态代理吗?他跟jdk动态代理的区别是什么?

优先是jdk动态代理,其次是cglib动态代理,网上搜一下两种动态代理的代码示例

其实就是动态的创建一个代理类出来,创建这个代理类的实例对象,在这个里面引用你真正自己写的类,所有的方法的调用,都是先走代理类的对象,他负责做一些代码上的增强,再去调用你写的那个类

spring里使用aop,比如说你对一批类和他们的方法做了一个切面,定义好了要在这些类的方法里增强的代码,spring必然要对那些类生成动态代理,在动态代理中去执行你定义的一些增强代码

如果你的类是实现了某个接口的,spring aop会使用jdk动态代理,生成一个跟你实现同样接口的一个代理类,构造一个实例对象出来,jdk动态代理,他其实是在你的类有接口的时候,就会来使用

很多时候我们可能某个类是没有实现接口的,spring aop会改用cglib来生成动态代理,他是生成你的类的一个子类,他可以动态生成字节码,覆盖你的一些方法,在方法里加入增强的代码

百度:jdk动态代理代码示例,cglib动态代理代码示例

Java
1
https://gitee.com/aimerwhy/Java-Interview-Advanced.git
git@gitee.com:aimerwhy/Java-Interview-Advanced.git
aimerwhy
Java-Interview-Advanced
Java-Interview-Advanced
master

搜索帮助