序言:

      在学习java基础时,由于学的不扎实,讲的实用性不强,就觉得没用,很多重要的知识就那样一笔带过了,像这个马上要讲的反射机制一样,当时学的时候就忽略了,到后来学习的知识中,很多东西动不动就用反射,所以回过头来把这个给重新补一下,自己欠下的债,迟早是要还的。

反射的概念:

在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功能就称为java语言的反射机制。通俗点讲,通过反射,该类对我们来说是完全透明的,想要获取任何东西都可以。

获取字节码文件对象的三种方式:

1、Class clazz1 = Class.forName(“全限定类名”);  //通过Class类中的静态方法forName,直接获取到一个类的字节码文件对象,此时该类还是源文件阶段,并没有变为字节码文件。

2、Class clazz2  = Person.class;    //当类被加载成.class文件时,此时Person类变成了.class,在获取该字节码文件对象,也就是获取自己, 该类处于字节码阶段。

3、Class clazz3 = p.getClass();    //通过类的实例获取该类的字节码文件对象,该类处于创建对象阶段

 

通过反射机制可以获取到哪些信息:

1.创建实例

 

 2。获取指定构造器方法。

3.获取指定成员变量

3.1获取全部成员变量

4.获得方法并使用  Method

*反射的代理实现:

反射的重点是代理的实现,因为在以后的开发中经常用到,例:spring框架的aop声明式事务控制,就要用到动态代理的实现。

代理分动态代理和静态代理,这里主要介绍动态代理:动态代理是一种设计模式,其非常简单,很容易理解,你自己可以做这件事,但是觉得自己做非常麻烦或者不方便,所以就叫一个另一个人(代理)来帮你做这个事情,而你就不用管了,这就是动态代理。举个例子,买火车票叫人代买。

我们此处主要介绍JDK提供的代理,也是比较好用的一种代理,

1、new出代理对象,通过实现InvacationHandler接口,然后new出代理对象来。

2、通过Proxy类中的静态方法newProxyInstance,来将代理对象假装成那个被代理的对象,也就是如果叫人帮我们代买火车票一样,那个代理就假装成我们自己本人

3、执行方法,代理成功

 

另外还有cglib,Proxy类中的方法创建动态代理类对象,这里就不多介绍了,以后用到再补充。

原文地址:https://www.cnblogs.com/jingyukeng/p/10235580.html

版权声明:本文为jpfss原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jpfss/p/11555003.html