package twelve;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;
/**
* 反射读取配置信息。
* @author KuKaFei.Hai
* @date 2020/4/26 : 11:07
*/
public class ReflectDemoB {
public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException {
//申明可以从流中读取键值对的对象
Properties proConf = new Properties();
//申明配置文件对应的流
FileReader confFile = new FileReader("OneStage\\src\\twelve\\ClassTxt");
//以简单的线性格式从输入字符流读取属性列表(关键字和元素对)。
proConf.load(confFile);
//关闭流
confFile.close();
//根据键来获取值
//获取类的名
String className = proConf.getProperty("className");
//获取类中的方法
String methodName = proConf.getProperty("methodName");
System.out.println(methodName);
//通过类名来获取该类的class
Class<?> stuClass = Class.forName(className);
//不能直接拿class,来NEW实例,而是要拿构造函数,通过构造函数来new 实例
// Object stuInst = stuClass.newInstance();
//得到类的构造函数
Constructor<?> getCon = stuClass.getConstructor();
//用构造函数,创建实例
Object stuInstance = getCon.newInstance();
//通过Class来获取方法
Method method = stuClass.getMethod(methodName);
method.invoke(stuInstance);
}
}