Java 反射案例

1案例

需求:需要写一个“框架”,不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中的任意方法

1.1实现

1.1.1配置文件

1.将需要创建的对象的全类名和需要执行的方法定义在配置文件中

在src的目录下创建pro.properties文件,具体配置文件代码如下

className = com.levizhao.demo01.reflection.Student  //类的路径
methodName = sleep //类中的函数

2.反射

1.在程序中加载读取配置文件

2.使用反射技术来加载类文件进内存

3.创建对象

4.执行方法

ReflectTest.java代码如下

package com.levizhao.demo01.reflection;
/*
     框架类
 */

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.加载配置文件
        //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);

        //2.获取配置文件中的定义的数据
        String className = pro.getProperty("className");
        String methodName = pro.getProperty("methodName");

        //3.加载该类进内存
        Class aClass = Class.forName(className);

        //4.创建对象
        Object o = aClass.newInstance();
        //5.获取方法对象
        Method method = aClass.getMethod(methodName);
        //6.执行方法
        method.invoke(o);
    }
}

3.总结

这样的好处是仅更改配置文件就可以增加程序的扩展性,不用再修改代码就可以实现代码的灵活变动。这就是反射的魅力!

posted @ 2020-12-26 21:11  withLevi  阅读(110)  评论(0编辑  收藏  举报