Java反射、动态代理

Java反射机制允许程序在运行时操作类和对象。动态代理是一种在运行时创建目标对象代理并增强其功能的技术,它不改变原始目标对象。InvocationHandler是关键接口,它的invoke方法控制代理对象的行为,处理方法调用前后的事宜。代理对象通常需要有与目标对象相同的方法以便进行功能增强。
摘要由CSDN通过智能技术生成


反射

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

什么是动态代理?

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

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

Object proxy: 动态代理对象

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

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

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

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

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

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

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

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

new Outer().new Inner();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值