java 反射理解

         反射我觉得是java的一大利器,其实很多语言所没有的,如果要用一句话来说明其含义的话,我的理解是动态创建对象,并执行对象的相关行为操作。

        记得之前看教学视频的时候有位老师对反射的一句话总结很到位,那时候记忆挺清晰的,但是自己的理解终究不是自己的理解,自己的理解才会一直记在脑海里。

 其实反射在我的开发中的用途并不是很广泛,印象中的话就是bean中有很多属性的时候采用反射进行赋值,另外就是对对象的深克隆方面的应用,而反射在其他地方的应用

则更多,比如动态代理,spring的AOP,以及在众多的ORM映射中都有体现。

       反射其实许多人的理解是一种采用元信息的方式来对类进行描述,比如下面的这段话,Java语言允许通过程序化的方式间接对Class进行操作,Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数、属性和方法等。Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能,这就为使用程序化方式操作Class对象开辟了途径。 通过这些我们其实也能够看到反射主要操作的就是class的一些相关属性方法以及构造函数。

       反射中的一些基础类,ClassLoader,Class,Method,Field以及Constructor,第一个主要是负责类加载,具体的加载方式之后需要学习,目前知道的就是其可以实现将类加载到JVM中,具体的一些策略比如全盘委托机制还是需要再进行学习的。Class即要反射对象的一些基本信息,Method即获取类方法的反射类,其中最主要的就是invoke方法,Field即是类属性的反射类,从该类中可以获得Class中的相关属性以及属性的访问权限。Constructor大家也都知道就是获取类的构造函数的反射类,可以获得所有类相关的构造函数,并且其中一个主要的而且也是常用的方法就是newInstance方法。

      了解了这些类的使用之后,基本上就可以在开发中简单的运用反射的一些原理来动态的创建类对象了。

       之后会补充的有,反射在动态代理中的应用,这个主要是proxy类的理解,也就是查看该类中使用到了反射的哪些东西。对于AOP以及ORM相关的东西也会进行更近一步的学习。

你可能感兴趣的:(Java解惑)