代理模式是一种常见的设计模式,目的就是提供一个代理控制对目标对象的访问,在被代理对象方法执行前后进行一些处理。本篇主要探究JDK自带的动态代理实现。
1.代理模式
代理模式的UML图如下:
通常代理类和被代理类会实现相同接口,对于Client来说没有任何差别,在代理类内部调用了被代理类的方法,来实现代理的操作。
2.Proxy类
Java的Proxy类实现了代理模式,我们通过JavaApi文档中的例子来理解Proxy是如何实现代理的
InvocationHandler handler = new MyInvocationHandler(...);
Class<?> proxyClass = Proxy.getProxyClass(Foo.class.getClassLoader(), Foo.class);
Foo f = (Foo) proxyClass.getConstructor(InvocationHandler.class).
newInstance(handler);
可以看到Jdk实现动态代理的方式,步骤如下:
- 创建InvocationHandler实现代理逻辑
- 根据被代理类的类加载器和接口创建获取代理类
- 通过包含InvocationHandler构造函数创建代理类实例
Proxy类将这三步进行了包装,newProxyI