反射案例
1.场景:通过反射做成一个只要修改配置文件就能执行不同类的方法
1)目录结构
src
--Main.java
--Test.java
pro.properties
2.代码
1)执行文件(Main.java)
package shapes; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Properties; public class Main { public static void main(String[] args) throws NoSuchFieldException, SecurityException, NoSuchMethodException, IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { //创建配置文件对象 Properties pro = new Properties(); //加载配置文件 ClassLoader classLoader = Main.class.getClassLoader(); InputStream is = classLoader.getResourceAsStream("pro.properties"); pro.load(is); //获取配置文件中定义的数据 String className = pro.getProperty("className"); String methodName = pro.getProperty("methodName"); //加载该类进内存 Class cls = Class.forName(className); //创建对象 Object obj = cls.newInstance(); //获取方法对象 Method method = cls.getMethod(methodName); //执行方法 method.invoke(obj); } }
2)方法类(Test.java)
package shapes; public class Test { public void say() { System.out.println("我说"); } }
3)配置文件(pro.properties)
className=shapes.Test
methodName=say
3.运行结果
注:这东西就只需要通过修改配置文件来改变执行的类方法,但是好像配置文件有缓存的样子
参阅:https://www.bilibili.com/video/BV1vk4y117fU?p=423