程序通过配置文件运行,用户配置什么,运行什么, 重要部分
实现步骤:
A 准备配置文件 集合类 Properties做B 使用IO流技术,关联集合类,读取配置文件
C 通过配置文件获取用户配置的类和方法
D 反射获取用户配置的类的字节码文件对象
E 获取类中的方法。并运行
数据bean:
student
package com.mth.bean;
public class Student {
public void study() {
System.out.println("学生学习!");
}
}
worker
package com.mth.bean;
public class Worker {
public void work() {
System.out.println("工人工作赚钱!");
}
}
config.txt
className=Student
methodName=study
测试类:
package com.mth.test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.lang.reflect.Method;
import java.util.Properties;
/*
* 通过配置文件config.txt运行
*
* Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。
* 属性列表中每个键及其对应值都是一个字符串。 键值对
* */
public class ReflectTest {
public static void main(String[] args) throws Exception {
// 建立集合对象
Properties proc = new Properties();
// 字节输入流来读取配置文件
FileInputStream in = new FileInputStream("config/config.txt");
// 集合io关联(此步拿到配置文件)
proc.load(in);
System.out.println(proc.getProperty("className"));// Student
System.out.println(proc.getProperty("methodName"));// study
String className = proc.getProperty("className");// 类名
String methodName = proc.getProperty("methodName");// 方法名
Class clazz = Class.forName("com.mth.bean." + className);
Object obj = clazz.newInstance();
Method method = clazz.getMethod(methodName);
method.invoke(obj);
}
}
程序运行结果:
更改配置文件 不修改代码 程序运行结果:
config.txt
className=Worker
methodName=work