一、静态代理
静态代理本身是一种好的编程思想,但是并不是良好的设计模式,Proxy类对程序扩展支持有限,几乎不支持太大的扩张。
二、动态代理
动态代理的意思是说:在程序运行时动态生成Proxy类,jdk里面,对动态生成Proxy提供了两个支持的类:
1.interface InvocationHandler
Object invoke(Object proxy, Method method, Object[] args)
只这一个方法,后面再说。
2. class Proxy
Class<?> getProxyClass(ClassLoader loader, Class<?>[] interface)
用来产生代理类,参数要提供interface作为代理接口。该Proxy会生成interface的虚实现,用来冒充真实的虚对象。
Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
用来产生代理对象,与上一个API相比,多了一个Invocationhandler参数,该参数与代理对相关联,当请求分发到
代理对象后,会执行 h.invoke 方法
A接口有c方法,类B实现A接口,原本应该是执行B类中的c方法,可现在不这样做; 我声明产生B类的代理类B',由它来冒充B类的“兄弟”并“实现”A接口, 对外界来说B'应该也有c方法,可当真正调用它的时候, 它会去执行与它关联InvocationHandler的invoke()方法, 在这个方法里面你可以做很多事情。这样,这个请求就被“代理”到其它地方去了。
参考自:http://langyu.iteye.com/blog/410071
参考自:http://blog.csdn.net/lovelion/article/details/8116704