1.1、基础概念
反射:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
“运行状态”,如何理解?
"运行状态"体现了反射的应用场景,当一些类,不需要提前加载进JVM内存,而是在运行时根据需要进行加载的时候,就可以通过反射进行动态加载
1.2、如何理解反射?
学习过java的童鞋,肯定对spring、hibernate一点也不会陌生。在进行底层配置的时候,会涉及到不同类型的数据库问题。例如sqlserver,可能会这样配置方言“org.hibernate.dialect.SQLServer2008Dialect”,而oracle,可以能会这样配置“org.hibernate.dialect.OracleDialect”。不同的数据库,只需要修改配置文件中的方言即可,这就是利用了反射的功能。程序在编译时,并不知道会使用哪种类型的数据库,只有在运行时,动态读取方言的配置,加载相应的类,运行类中定义的方法和属性,从而实现相应的功能。
其实说简单点,反射就是一种机制,可以让你仅知道类的名字的情况下,了解整个类的内部的结构,并且访问内部的成员和方法等
spring中的依赖注入、反转控制使用的都是这种机制
二、反射API及使用
反射机制的实现需要四个类:Class、Constructor、Field、Method
Class类:在程序运行期间,系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。虚拟机利用运行时类型信息选择相应的方法执行,保存这些信息的类被称为Class
Constructor、Field、Method:分别用于描述类的构造器、域、方法
下面我们用一个简单的例子来演示反射的使用:
package com.my.po; /** * description:{description} * author:jyy * date:2018-02-06 16:28 * modify:{modify} */ public interface InterFace { void read(); }