一篇文章让你搞懂Java中的静态代理和动态代理( 二 )

输出结果:

一篇文章让你搞懂Java中的静态代理和动态代理

文章插图

InvocationHandler 接口 和 invoke 方法介绍InvokationHandler是Java 反射包里面的一个接口通过用户类来实现 , 来激发一个动态代理类的方法 。
它只有一个方法:
public Object invoke(Object proxy, Method method, Object[] args)throws Throwable;
  1. Object:实现方法的代理对象
  2. Method:代理实例激发的方法,Porxy参数中的接口方法
  3. Object[]:传递给方法的一系列参数

静态代理和动态代理的区别静态代理:
在jvm运行之前就已经获取到代理类的class信息 。代理类需要开发者自己写好,即开发者需要自己实现代理类的.java文件,也就是说在项目编译之前就需要存在代理类的.java文件 , 然后在编译阶段就可以将代理类的.java文件编译成.class文件,从而得到代理类的class信息;
动态代理:
不需要开发人员自己实现代理类的,也就是项目代码中是不存在代理类的.java文件的 , 既然代理类未由开发者实现,那么程序经过编译之后肯定也不会有代理类的.class文件 。也就是说经过编译之后程序未启动运行之前,关于代理类的信息我们一无所知,它是在程序运行过程中需要用到的时候才会由jvm动态生成的,而且生成之后也只存在于内存中,不会写到磁盘保存成.class文件,更加不会保存为.java文件;
总之一句话就是静态代理是需要开发人员自己实现代理类的逻辑的,且代理类的class信息是在程序运行之前就已经可以获取到的了,而动态代理是不需要开发人员自己实现代理类的,
【一篇文章让你搞懂Java中的静态代理和动态代理】

推荐阅读