Skip to content

Latest commit

 

History

History
22 lines (7 loc) · 1.25 KB

File metadata and controls

22 lines (7 loc) · 1.25 KB

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

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

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

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

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

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

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