动态代理(cglib与jdk)

本文介绍了动态代理的概念,对比了静态代理的优缺点,并详细讲解了JDK动态代理和CGLIB动态代理的工作原理及区别。JDK动态代理基于反射,适用于接口,而CGLIB通过继承实现,适用于没有接口的情况。两者在生成速度和执行效率上有所不同。
摘要由CSDN通过智能技术生成

​📒个人主页:热爱生活的李📒
​❤️感谢大家阅读本文,同时欢迎访问本人主页查看更多文章​❤️
🙏本人也在学习阶段,如若发现问题,请告知,非常感谢🙏

动态代理

代理类在程序运行时创建的代理方式被称为动态代理
静态代理中,代理类是自己定义好的,在程序运行之前就已经编译完成。然而动态代理,代理类并不是在Java代码中定义的,而是运行时根据我们在Java代码中的指示动态生成的。相比较静态代理,动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类中的方法,比如想要在每个代理方法前都加上一个处理方法,静态代理就需要在每个类内部加上这个方法

静态代理与动态代理的区别

静态代理

优点
简单、效率高、容易理解
缺点
当目标类增多,代理类也需要增加
当接口方法增加或修改的时候,很多类都需要修改,因为目标类和代理类都实现了相同的接口

动态代理

优点
动态代理中的目标类很多的时候代理类的数量可以很少
修改接口的方法的时候不会影响到代理类
代理类可以自动帮助我们生成无需手动

JDK动态代理

JDK动态代理是基于反射机制,生成一个实现代理接口的匿名类,然后重写方法进行方法增强。在调用具体方法前通过调用InvokeHandler的invoke方法来处理。
他的特点是生成代理类的速度很快,但是运行时调用方法操作会比较慢,因为是基于反射机制的,而且只能针对接口编程,即目标对象要实现接口

public interface Person {
   
    void sayHi();
}
public class Student implements Person{
   
    @Override
    public void sayHi() {
   
        System.out.println("Hi 我是一名学生");
    }
}
public class JDKProxy implements InvocationHandler {
   
    Object target;
    public Object newProxy(Object obj){
   
        this
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值