Java反射、动态代理

文章目录

  • 反射
  • 什么是动态代理?
  • 程序为什么需要代理?代理长什么样?


反射

Java反射、动态代理_第1张图片Java反射、动态代理_第2张图片Java反射、动态代理_第3张图片
Java反射、动态代理_第4张图片
java反射机制原理:我们写的源代码是.java文件,通过javac编译后成为.class文件,即字节码文件,程序执行时,JVM会类加载字节码文件到内存,严格意义上说是加载到方法区,并转换成java.lang.Class对象,通过反射,我们可以构建实例,得到成员变量的值,得到方法并调用。

什么是动态代理?

可以无侵入式的给代码增加额外功能

动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以理解为运行期间,对象中方法的动态拦截,在拦截方法的前后执行功能操作。
Java反射、动态代理_第5张图片在 JDK 动态代理中,实现了 InvocationHandler 的类可以看作是 代理类(因为类也是一种对象,所以我们上面为了描述关系,把代理类形容成了代理对象)。JDK 动态代理就是围绕实现了 InvocationHandler 的代理类进行的
代理类一个最最最重要的方法就是 invoke 方法,它有三个参数

Object proxy: 动态代理对象

Method method: 表示最终要执行的方法,method.invoke 用于执行被代理的方法,也就是真正的目标方法

Object[] args: 这个参数就是向目标方法传递的参数。

————————————————
引用

程序为什么需要代理?代理长什么样?

对象如果嫌身上干的事太多的话,可以通过代理来转移部分职责。

对象有什么方法想被代理,代理就一定要有对应的方法

代理要干什么事,是由invoke方法决定的

Java中非静态内部对象的创建取决于其外部对象。在上述面试问题中,foo和main方法是静态方法。静态方法中没有this,即没有所谓的外部对象,因此无法创建内部对象。如果你想在静态方法中创建内部对象,你可以这样做:

new Outer().new Inner();

你可能感兴趣的:(java,开发语言)