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);
}
}
网友评论