一、反射机制
反射:在JVM运行时,一切框架的基础。
对于JVM中任何一个类,都能动态获取该类的所有属性和方法。
对于JVM中的任何一个对象,都能动态调用该对象的属性和方法。
动态获取信息以及调用对象机制称为反射机制
二、反射的用途
三、用法
SpringImpl
/**
* Welcome to my project
* Author: RedStar
* Email: CYH.RedStar@outlook.com
* Date: 2023/3/22
*/
public class SpringImpl implements SpringDao{
public void aad() {
System.out.println("SpringImpl");
}
}
SpringVip
/**
* Welcome to my project
* Author: RedStar
* Email: CYH.RedStar@outlook.com
* Date: 2023/3/22
*/
public class SpringVip implements SpringDao {
public void aad() {
System.out.println("SpringVip");
}
}
SpringDao
/**
* Welcome to my project
* Author: RedStar
* Email: CYH.RedStar@outlook.com
* Date: 2023/3/22
*/
public interface SpringDao {
void aad();
}
Test01
/**
* Welcome to my project
* Author: RedStar
* Email: CYH.RedStar@outlook.com
* Date: 2023/3/22
*/
public class Test01 {
public static void main(String[] args) throws Exception {
// 获取配置文件的输入流
InputStream stream = Test01.class.getClassLoader().getResourceAsStream("info.properties");
// 创建一个 Properties 对象
Properties p = new Properties();
// 加载配置文件到 Properties 对象中
p.load(stream);
// 获取配置文件中的 className 键对应的值,即要调用的类的全类名
String className = p.getProperty("className");
// 获取配置文件中的 methodName 键对应的值,即要调用的方法的方法名
String methodName = p.getProperty("methodName");
// 加载要调用的类
Class clazz = Class.forName(className);
// 获取要调用类的无参构造器
Constructor constructor = clazz.getDeclaredConstructor();
// 通过构造器创建一个实例
SpringDao springDao = (SpringDao) constructor.newInstance();
// 调用实例的aad()方法
springDao.aad();
// 获取要调用的方法对象
Method declaredMethod = clazz.getDeclaredMethod(methodName);
// 调用指定方法
declaredMethod.invoke(springDao);
}
}
info.properties
#通过更改配置文件实现Test01控制台输出效果
#className=com.cyh.dao.impl.SpringImpl
className=com.cyh.dao.impl.SpringVip
methodName=aad
四、控制台输出效果