在编程时,代理是非常重要的一个概念。在设计模式中,也有所谓的代理模式,我们来看它的定义:通过创建一个对象来控制对某些特定对象的访问。也就是说,代理的价值在于可以拦截对象的访问,在拦截后,你可以在使用原有功能时添加额外的一些东西,比如添加日志等,而不需要改变原对象的源码。当然直接在源代码中添加是可以的,但最后造成的结果就是庞大的代码量以及复杂的逻辑,相信谁都不愿意看到。在JDK中内置了实现动态代理的类,那就是Proxy类。
一、Proxy类概述
Proxy类位于java.lang.reflect包中,所以其实现跟反射机制有关,它实现了Serializable接口,所以此类的对象可以序列化。Proxy类提供创建动态代理类及其实例,创建的方式一般有两种,其中一种:
InvocationHandler handler = new MyInvocationHandler(...);
Class<?> proxyClass = Proxy.getProxyClass(Foo.class.getClassLoader(), Foo.class);
Foo f = (Foo) proxyClass.getConstructor(InvocationHandler.class).
newInstance(handler);
或者更简单的方式:
Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),