反射案例

  • 需求:写一个“框架,可以帮我们创建任意类的对象,并执行其中任意方法。
  • 实现:
    • 配置文件
    • 反射
  • 步骤:
    • 将需要创建的对象的全类名和需要执行的方法定义在配置文件中
    • 在程序中加载读取配置文件
    • 使用反射技术来加载类文件进内存
    • 创建对象
    • 执行方法

首先定义配置文件pro.properties

className=com.domain.Student
methodName=sleep

定义两种测试类:

public class Student {
    public void sleep() {
        System.out.println("sleep...");
    }
}

public class Person {
    public void eat() {
        System.out.println("eat...");
    }
}

定义反射测试类:

public class ReflectTest {
    public static void main(String[] args) throws Exception {
        // 1.加载配置文件
        // 1.1创建Properties对象
        Properties pro = new Properties();
        // 1.2加载配置文件,转换为一个集合
        // 1.2.1获取class目录下的配置文件
        ClassLoader classLoader = ReflectTest.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 o = cls.getDeclaredConstructor().newInstance();
        Method method = cls.getMethod(methodName);

        method.invoke(o);

    }
}

若想创建Person对象且执行eat()方法,无需修改具体的代码实现部分,仅需修改配置文件pro.properties为:

className=com.domain.Person
methodName=eat

如果所写的系统十分庞大,修改java代码后,需要重新测试,重新编译,重新上线等等。但是配置文件仅仅只是一个物理文件,修改方便,且让程序的扩展性更强。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!