代理模式但目的在于进行访问控制,其意图在于为被代理对象提供一个替身,原有的被代理对象可能不便于被直接访问(是一个远程对象)或是一个访问权限被限制的对象
动态代理和静态代理的区别
1、动态代理中的代理关系是程序运行时产生的,支持动态变化。静态代理的对象间代理关系是编译前就已经确定的,在运行时刻,是固定不变的。
2、动态代理可以通过单一的一个类中的一个方法,为多个类的多个方法提供代理服务
3、动态代理是针对特定接口,创建代理类,使用者可以在这个代理类Proxy身上直接调用各种接口方法,而代理类会把所有的方法调用都转发给一个单一的handler的invoke方法,完成真正的逻辑。
JDK动态代理
缺点:必须依托于接口




cglib动态代理
代理对目的是构造一个和被代理的对象有同样行为的对象,一个对象的行为是在类中定义的,对象只是类的实例。
通过继承可以继承父类所有的公开方法,然后可以重写这些方法,在重写时对这些方法增强,这就是cglib对思想。
它生成一个继承B对类型C(代理类),这个代理类持有一个MethodInterceptor,我们setCallback时传入对,C重写所有B中的方法,同时在C中,构建名叫“CGLIB”+"$父类方法名$"的方法,所有非私有的且没有被final修饰的方法都会被构建,方法体里只有一句话super.方法名,可以简单的认为保持了对父类方法对一个引用,方便调用。




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