jdk和cglib,静态动态代理差别
时间: 2023-10-24 17:09:32 浏览: 62
JDK和CGLIB都可以实现代理模式,但是它们实现的代理类型不同。JDK实现的代理是基于接口的,也称为接口代理。JDK通过反射机制动态生成代理类,该代理类实现了接口中的所有方法,并将方法调用委托给了被代理的对象。而CGLIB实现的代理是基于类的,也称为子类代理。CGLIB通过继承被代理类,动态生成一个子类,并重写其中的方法来实现代理。相比于JDK代理,CGLIB代理的效率更高,但是被代理的类必须有默认构造方法并且不能被final修饰。
相关问题
动态代理和静态代理的区别
静态代理是在编译期间就已经确定了代理对象,代理类和被代理类的关系,而动态代理是在运行时动态生成代理对象,无需手动编写代理类。动态代理的实现方式有两种:JDK动态代理和CGLIB动态代理。
具体区别如下:
1.实现方式不同:静态代理需要手动编写代理类,而动态代理是在运行时动态生成代理对象。
2.适用场景不同:静态代理适用于代理对象数量较少的情况,而动态代理适用于代理对象数量较多的情况。
3.效率不同:静态代理在编译期就已经确定了代理对象,效率较高,而动态代理需要在运行时动态生成代理对象,效率较低。
4.扩展性不同:静态代理的扩展性较差,如果要代理的对象增多,需要手动编写大量的代理类;而动态代理可以通过修改代理对象的生成方式来实现扩展。
5.实现方式不同:静态代理是通过实现同一个接口来实现代理,而动态代理是通过实现InvocationHandler接口来实现代理。
AOP的动态代理和静态代理区别
AOP的动态代理和静态代理在实现上有一些区别。动态代理是在运行时动态生成代理类,不需要在代码中显式地写出代理类。而静态代理是在编译时就已经创建好代理类,并且需要手动编写代理类。
具体来说,动态代理可以分为两类:基于接口的动态代理和基于类的动态代理。基于接口的动态代理是使用JDK动态代理实现的,它需要被代理的类实现一个接口。基于类的动态代理是使用cglib动态代理实现的,它可以代理没有实现接口的类。
相比之下,静态代理需要手动编写代理类,并且代理类和被代理类需要实现相同的接口。静态代理在编译时就已经确定代理关系,无法在运行时动态改变。
总的来说,动态代理更加灵活和方便,它可以在运行时动态生成代理类,不需要在代码中显式地写出代理类。而静态代理需要手动编写代理类,代理关系在编译时就已经确定。所以在使用AOP时,通常会选择使用动态代理来实现对原有代码的增强。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [Spring AOP基础之代理模式.静态代理和动态代理](https://blog.csdn.net/zhangchen124/article/details/127111423)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [AOP静态代理与动态代理](https://blog.csdn.net/L_Dream_IT/article/details/107035717)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)