代理模式:为其他对象提供一种代理以控制对这个对象的访问。
好处:可以控制被代理类的访问和行为。在不修改被代理类的情况下对被代理类的访问做出修改。
代理分为:
静态代理:编译期已经确定了被代理的对象和代理类。
1)代理类和被代理类实现同样的接口(保证行为一致)
2)代理类持有一个被代理类对象(保证代理类能够调用到被代理类)
动态代理:在运行期间才确定被代理的对象,并动态生成一个代理类。
Java中动态代理有两种:
jdk动态代理:通过反射来创建代理类。被代理类和代理类实现同样的接口。(必须有共同的接口)
1)实现共同的接口,需要定义一个共同的接口。
2)需要定义代理类的回调类,该类需要实现InvokecationHandler接口,在invoke方法中编写代理类的逻辑
3)需要通过反射的API,生成代理类。
Cglib动态代理:通过编辑字节码文件来生成一个代理类。生成的代理类继承自被代理类。
1)导入cglib依赖
2)实现MethodInterceptor接口
代理类和被代理类的行为是一致的。
如何保证行为一致? 1)实现同样的接口 2)继承关系
原文:https://www.cnblogs.com/xie-qi/p/13216693.html