动态代理

259 阅读2分钟

代理模式但目的在于进行访问控制,其意图在于为被代理对象提供一个替身,原有的被代理对象可能不便于被直接访问(是一个远程对象)或是一个访问权限被限制的对象

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

1、动态代理中的代理关系是程序运行时产生的,支持动态变化。静态代理的对象间代理关系是编译前就已经确定的,在运行时刻,是固定不变的。

2、动态代理可以通过单一的一个类中的一个方法,为多个类的多个方法提供代理服务

3、动态代理是针对特定接口,创建代理类,使用者可以在这个代理类Proxy身上直接调用各种接口方法,而代理类会把所有的方法调用都转发给一个单一的handler的invoke方法,完成真正的逻辑。

JDK动态代理

缺点:必须依托于接口





cglib动态代理

代理对目的是构造一个和被代理的对象有同样行为的对象,一个对象的行为是在类中定义的,对象只是类的实例。

通过继承可以继承父类所有的公开方法,然后可以重写这些方法,在重写时对这些方法增强,这就是cglib对思想。

它生成一个继承B对类型C(代理类),这个代理类持有一个MethodInterceptor,我们setCallback时传入对,C重写所有B中的方法,同时在C中,构建名叫“CGLIB”+"$父类方法名$"的方法,所有非私有的且没有被final修饰的方法都会被构建,方法体里只有一句话super.方法名,可以简单的认为保持了对父类方法对一个引用,方便调用。







                             喜欢的可以关注一下公众号,发布一些leetcode题目