package Day01_Demo.Test03;/* @create 2020--12--21--10:31*/import org.junit.Test;import java.io.File;import java.io.FileReader;import java.io.IOException;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;import java.util.Properties;/** * 利用properties实现不修改源码的基础上处理数据 * <p> * 举例: * 单机游戏中可以修改参数 -->下载修改器,输入修改的参数就可以 --> 直接去修改的是配置文件 * 当前这个properties也是用的这个原理进行实现 * <p> * 在实际开发中,源码是不会给甲方的,如果甲方需要修改配置,就可以直接去修改配置文件 - 操作是乙方项目实施工程师给甲方培训的。 */public class ConfigTest {// @Test public void test1() { //测试学生和老师的对象 Student s1 = new Student(20, "Tom"); System.out.println(s1); Teacher t = new Teacher(20, "Tom"); System.out.println(t); } /** * 从配置文件ClassName中读取应该要创建的哪一个类 * 好处,想要获取老师或者是学生去修改配置文件即可,不需要修改源代码 */// @Test public void test2() throws IOException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { //从className中读取类名 Properties prop = new Properties(); //加载配置文件并且读取 prop.load(new FileReader("className.properties")); //根据key获取value String className = prop.getProperty("className"); System.out.println(className); //创建类的实例 Class clazz = Class.forName(className); //找到该类的构造器 - 有参 Constructor constructor = clazz.getConstructor(int.class, String.class); //利用构造函数处理 Object obj = constructor.newInstance(20, "Tom"); System.out.println(obj); } /** * 从配置文件data中读取数据并且填入实例 */ @Test public void test3() throws IOException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { Properties prop = new Properties(); prop.load(new FileReader("d:"+ File.separator+"a\\className.properties")); String className = prop.getProperty("className"); //创建实例 Class clazz = Class.forName(className); //构造函数中进行处理 //1.从配置文件当中获取数据 Properties prop_data = new Properties(); prop_data.load(new FileReader("d:"+ File.separator+"a\\data.properties")); String id = prop_data.getProperty("id"); String name = prop_data.getProperty("name"); System.out.println(id+" "+ name); //2.将数据写入对象 - 构造函数写入 Constructor constructor = clazz.getConstructor(int.class, String.class); //从properties中获取的都是字符串类型,所以要将id转化为int类型 Object obj = constructor.newInstance(Integer.parseInt(id),name); System.out.println(obj); }}