首页 > 技术文章 > java读取配置文件,利用反射根据配置文件执行方法

kehao 2021-03-26 21:39 原文

需求:根据配置文件中的内容创建相应的类的对象,并执行相应的方法

实现:

  1. 配置文件
  2. 反射

步骤:

  1. 将需要创建的对象的全类名和需要执行的方法定义在配置文件中
  2. 在程序中加载读取配置文件
  3. 使用反射技术来加载类文件进内存
  4. 创建对象
  5. 执行方法

注意:需要将配置文件放在src目录下,放在src目录下的任何文件都会被编译到classes目录下,这样做的目的是为了让配置文件跟随编译后的class文件一起,因为交付用户使用的是class文件,而不是源代码。

如何读取src目录下的文件:使用类的加载器ClassLoader类的方法 :

  • InputStream getResourceAsStream(String name)
    • 此方法返回输入流,该流从类目录下读取文件
    • 参数传递文件名
      预先定义好的类
//文件1
package kehao.reflet;
public class Student {
    public void sayHello(){
        System.out.println("hello!I'm a student!");
    }
}
//文件2
package kehao.reflet;
public class Teacher {
    public void sayHello(){
        System.out.println("hello!I'm a teacher!");
    }
}

配置文件:reflect.properties

className = kehao.reflet.Teacher
methodName = sayHello

功能代码:

public class ReflectTest {
    public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        ClassLoader classLoader = ReflectTest.class.getClassLoader();
        InputStream is = classLoader.getResourceAsStream("reflect.properties");
        Properties properties = new Properties();
        properties.load(is);
        String className = properties.getProperty("className");
        String methodName = properties.getProperty("methodName");
        Class aClass = Class.forName(className);
        Object o = aClass.getConstructor().newInstance();
        aClass.getMethod(methodName).invoke(o);
    }
}

推荐阅读