概念
代理:代替处理,又称委托模式。
实现:为目标对象提供(包装)了一个代理,这个代理可以控制对目标对象的访问。外界不直接访问目标对象,而是访问代理对象,再由代理对象调用目标对象。
分类:静态代理、动态代理
静态代理
代理对象持有目标对象的一个句柄,
其实就是将目标对象的引用作为代理对象的成员变量。
缺点:因为要对目标对象的每个方法都进行静态编码包装,所以目标对象中有多少个方法,静态代理对象中就需要有多少个方法。目标对象中方法过多的时候,代理对象就会显的臃肿,也不便于维护和拓展。
代码实现
动态代理
所谓动态代理其实就是产生一个被处理器全面监听的代理对象出来,这个代理对象的每次方法调用都会被处理器拦截下来。
代码实现:
四要素:接口、实现类(被代理对象)、处理器、代理对象。
接口
实现类:
处理器:
实现InvocationHandler接口,持有被代理对象。
核心方法——invoke,调用被代理对象的相应目标方法。
测试:
调用Proxy类中的newProxyInstance方法生成代理对象。
传入参数——处理器、实现类类加载器、实现类的父接口。