反射Reflect

反射机制是干什么的

 

反射在以后开发中的作用

我们设计程序最终是要提高程序的执行效率,我们在开发一个模块的时候,要不停的去创建对象 User user = new User(); 使用new关键字,会使得程序之间产生耦合,以后new关键字使用多了,耦合就会变高,程序的执行效率就会很差

 

这个时候我们能不能换一种方式去创建实例,尽量避免使用new关键字,反射机制就可以在不使用new的情况下去创建实例

反射是各大java框架的底层:框架就是帮助程序解耦,提高程序的执行效率,提高开发人员的开发效率

spring 框架:容器

 

 

什么是反射

反射是java中比较偏底层的一种机制,通过反射可以在类加载时去获取类相关的信息

 

如何去获取一个类的字节码对象(Class)

对象.getClass()

类.class属性

Class.forName("全类名")

 

 

获取类中的属性

获取类中公共的属性

getField()

 

获取类中所有的属性

getDeclaredField()

 

getDeclaredFields()

 

获取全类名

获取简类名

 

获取属性的类型

declaredField.getType()

获取属性的修饰符

 

在学习反射时,获取类的信息都是通过get方法去获取的

 

获取类中的方法

由于java类中的方法支持重载,所以在调用getMethod(方法名称,参数类型)方法时需要将方法的参数类型传入,不传入则默认获取无参的方法

 

获取类中公有的方法

 

获取类中所有的方法

 

其它的方法

 

获取所有的构造

 

反射工具类ReflectUtils

写一个工具类,写一个静态方法,方法传入一个类的全类名,然后反编译(可以获取这个类中所有的信息)这个类工具类要适用于所有的类

根据反射获取类的信息

 

反射

 

获取父类

获取实现的接口

 

如何通过反射机制来创建一个类的实例

无参构造实例

newInstance()

 

有参构造实例

getDeclaredConstructor() 不传参数就是获取无参构造实例

 

如何通过反射来给属性赋值

 

如何通过反射获取属性值

方法一

先打破封装,再通过set方法给属性赋值

方法二

通过反射调用这个属性所对应的set方法给属性赋值

 

 

通过反射调用类中的方法

注意:操作私有的方法需要打破封装

 

反射在以后的用途

反射最重要的用途就是开发各种通用框架,比如在spring中,我们将所有的类Bean交给spring容器管理,无论是XML配置Bean还是注解配置,当我们从容器中获取Bean来依赖注入时,容器会读取配置,而配置中给的就是类的信息,spring根据这些信息,需要创建那些Bean,spring就动态的创建这些类,还有在struts2的struts.xml中配置action,也是通过反射调用的action

 

通过反射创建Json格式属性值获取(工具类)