反射案例

1.场景:通过反射做成一个只要修改配置文件就能执行不同类的方法

1)目录结构

src

  --Main.java

  --Test.java

pro.properties

 

2.代码

1)执行文件(Main.java)

package shapes;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;

public class Main {

    public static void main(String[] args) throws NoSuchFieldException, SecurityException, NoSuchMethodException, IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        //创建配置文件对象
        Properties pro = new Properties();
        //加载配置文件
        ClassLoader classLoader = Main.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 obj = cls.newInstance();
        //获取方法对象
        Method method = cls.getMethod(methodName);
        //执行方法
        method.invoke(obj);
        
    }
}

 

2)方法类(Test.java)

package shapes;

public class Test {
    public void say() {
        System.out.println("我说");
    }
}

 

3)配置文件(pro.properties)

className=shapes.Test
methodName=say

 

3.运行结果

 

 

注:这东西就只需要通过修改配置文件来改变执行的类方法,但是好像配置文件有缓存的样子 

 

参阅:https://www.bilibili.com/video/BV1vk4y117fU?p=423

 

posted @ 2022-04-01 11:38  蜗牛的礼物  阅读(19)  评论(0编辑  收藏  举报