今天来聊聊反射这个概念
一、反射是什么?
反射是在运行状态中,对于一个任意类,都能够获取到这个类得所有属性和方法,对于任意一个对象,都能够调用它得任意一个方法和属性,这种动态获取信息以及动态调用对象得方法得功能称为Java得反射机制。
二、反射是有什么好处?
优点:能够在运行时动态获取类得实例,提高灵活性
缺点:反射性能比较低,需要解析字节码,将内存中得对象进行解析。
三、反射如果获取对象?
Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
1.Class.forName("类得路径")
Class class = class.forName("test.demo.Main")
2.类名.class
Class class = Main.class
3.对象名.class
Main main = new Main();
Class class= main.getClass();
四、反射使用的步骤
1.获取想要操作类的对象,这是反射的核心。
2.调用Class类的方法,即就是反射的使用。
3.使用API来操作d这些信息。
public class Apple {
private int price;
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public static void main(String[] args) throws Exception{
//正常的调用
Apple apple = new Apple();
apple.setPrice(5);
System.out.println("Apple Price:" + apple.getPrice());
//使用反射调用
Class clz = Class.forName("com.test.Apple");
Method setPriceMethod = clz.getMethod("setPrice", int.class);
Constructor appleConstructor = clz.getConstructor();
Object appleObj = appleConstructor.newInstance();
setPriceMethod.invoke(appleObj, 14);
Method getPriceMethod = clz.getMethod("getPrice");
System.out.println("Apple Price:" +
getPriceMethod.invoke(appleObj));
}
}
总结
反射是在Spring中一个重要的组成部分,其中注解都是通过反射实现的。