Java入门--反射(Reflect)
利用反射和配置文件, 加载不同的类和方法
创建配置文件对象 new Properties()
通过当前类获取类加载器 CurrentClass.class.getClassLoader()
通过类加载器获取配置文件资源 classLoader.getResourceAsStream("project.properties")
获取配置文件的相关信息 pro.getProperty("className")
获取需要加载的类以及方法 Class.forName(className), class.getMethod(methodName)
调用方法 method.invoke(obj) (参数信息: 方法相应的类名, 以及方法参数)
package io.github.wangermaizi.day14;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;
// 根据配置文件调用不同的代码
public class ReflectTest {
public static void main(String[] args) throws Exception {
// 1. 创建配置文件对象 (常用操作)
Properties pro = new Properties();
// 2. 获取配置文件路径
// 2.1 获取class目录下的配置文件
ClassLoader classLoader = ReflectTest.class.getClassLoader();
// ReflectTest.class.getClassLoader(); // 获取类字节码
// 通过获取到的类加载器, 获取配置文件的字节流
InputStream is = classLoader.getResourceAsStream("pro.properties");
// 3. 加载配置文件(或者说加载文件流)
pro.load(is); // --> 此处有可能会报错
// 4. 获取配置文件中定义的信息
String className = pro.getProperty("className");
String methodName = pro.getProperty("methodName");
// 通过类名调用方法名
Class aClass = Class.forName(className);
Object obj = aClass.newInstance();
// 获取方法对象
Method method = aClass.getMethod(methodName);
// 调用方法对象
method.invoke(obj);
}
}