设计一个框架,可以运行任何类型的任何方法。要执行的类和方法在配置文件中指定。
className=com.homework_test.test04.Demo.Teacher
methodName=teaching
package com.homework_test.test04;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;
public class RunClass {
public static void main(String[] args) throws InvocationTargetException, NoSuchMethodException, ClassNotFoundException, InstantiationException, IllegalAccessException {
run();
/* 打印输出的内容:
className = com.homework_test.test04.Demo.Teacher
methodName = teaching
老师正在教课!!!
*/
}
public static void run() throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException, ClassNotFoundException {
//创建属性集对象
Properties pro = new Properties();
//创建输出流,用来加载配置文件到Pro对象
try(FileReader fr=new FileReader("day12_Junit,反射,注解,代理\\src\\com\\homework_test\\test04\\classInfo.properties")){
pro.load(fr);
} catch (IOException e) {
e.printStackTrace();
}
//pro对象中,有键值对信息
//1.获取className类名全名,创建相应的class对象
String className = pro.getProperty("className");
System.out.println("className = " + className);
Class<?> cls = Class.forName(className);
//2.获取指定方法的class对象
String methodName = pro.getProperty("methodName");
System.out.println("methodName = " + methodName);
//获取方法的class文件对象
Method method = cls.getDeclaredMethod(methodName);
//并暴力去破解执行
method.setAccessible(true);
//3.获取RunClass对象,便于调用执行方法
Object obj = cls.newInstance();
Object invoke = method.invoke(obj);
}
}
package com.homework_test.test04;
public class TestRunClass {
public static void main(String[] args) throws Exception {
RunClass.run();
}
}
package com.homework_test.test04.Demo;
public class Study {
public void dohomework(){
System.out.println("正在苦逼的做作业!!");
}
}
package com.homework_test.test04.Demo;
public class Teacher {
public void teaching(){
System.out.println("老师正在教课!!!");
}
}
原文:https://www.cnblogs.com/liqiliang1437/p/13155691.html