写在前面:
- 大神和diao炸天的亲请绕道..
- 关于代理模式的概念这里省去,大家可以放鸟尽情搜..
- 关于为什么叫动态代理,个人理解是代理的类是在运行时动态生成的,大家也可以参考网上的理解..
- 文笔很差,所以文字较少,都在代码和注释中..
=======一点不华丽的分割线————————-
开门见山,lets go..
java中可以通过jdk提供的 Proxy.newProxyInstance静态方法来创建动态代理对象,下面先来看看这个方法的实现
1 | public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) |
下面通过个例子来说明下:
先来定义一个接口,jdk的动态代理基于接口来创建代理类,不能基于类的原因是java不支持多重继承,而代理类都会继承Proxy类(个人理解).
1 | /** |
再来一个具体的实现,在代理模式中可以叫它的实例可以叫target,这个是真正执行操作的对象
1 | /** |
好,接下来我们来写个动态代理工厂,根据 不同的target来创建动态代理对象
1 | /** |
可以看到这是一个简单的实现,只是在真实对象执行前后各打一句信息..
接下来用一个 main函数来把这些结合起来
1 | /** |
ok,小手抖一下,走你,看下执行结果
1 | pub msg: key is name, content is kevin.fan |
可以看到在调用代理对象的方法时,添加的额外动作已经生效,接下来我们看下生成的代理类的代码..
1 | import com.aliyun.demo.kevin.coder.lang.proxy.Subject; |