25(java中的反射和动态代理)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Haidaiya/article/details/83016856

1 概述

反射获取的都是class对象,以下是在不同的阶段获取对象的方式。

2 源文件阶段class对象的作用

可以利用全类名创造对象,具体代码为:

3 class对象获取类中的字段(即成员变量)

注释:通过Class.forName()获取到了Person的字节码对象

           getConstructor()方法返回构造方法,注意参数需要使用Class对象

           通过得到的有参构造创建一个实例p

           获取私有变量private  name,暴力获取

          将name这个字段设置为可以访问

          将p对象中的name字段改为“李四”值。

4 class对象获取类中的方法

5 动态代理

上面反射的作用就是在于获得字节码文件,通过字节码文件获得这个字节码文件的属性啊,方法啊之类的,动态代理这个概念看似在目前学习阶段没有作用,但是在以后从事java EE开发中,那些框架什么的,还是有用处的,动态代理其实是一种加强,比如我有一个笔,这个笔买来就是黑色墨水,但是我现在想让它写红色墨水,又不能把笔拆了,所以我只能通过动态代理给这个笔再绑上一个红色笔芯。

这是我对动态代理的理解。下面用代码详细解释:

(0)动态代理只能用于接口,所以我会对这个接口进行代理

(1)黑色的钢笔接口

(2)黑色钢笔接口的实现类

(3)未代理之前

(4)代理第一步:创建实现InvocationHandler的类,并重写invok方法

(5)代理第二步:使用Proxy的newProxyInstance开始代理

(6)代理后结果

(7)总结

三句话:1 ,只能对接口代理

              2,InvokationHandler接口

              3,Proxy类

猜你喜欢

转载自blog.csdn.net/Haidaiya/article/details/83016856