JAVA单排日记-2020/2/5-Junit-反射案例

在这里插入图片描述

获取配置文件的方式

使用类加载器ClassLoader
在这里插入图片描述
1.获取字节码文件对应的类加载器ClassLoader

class.class.getClassLoader()

2.返回资源对应的字节流

类加载器对象.getResourceAsStream("配置文件")

案例程序:

类1

package junit.reflects;

public class Class01Eat {

    public Class01Eat() {
    }

    public void eatMethod(){
        System.out.println("吃饭!!!");
    }
}

类2

package junit.reflects;

public class Class02Sleep {
    public Class02Sleep() {
    }

    public void sleepMethod(){
        System.out.println("睡觉了!!!");
    }
}

配置文件:
使用类1:

className=junit.reflects.Class01Eat
methodName=eatMethod

调用主程序:

package junit.reflects;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Properties;

public class TestClass {
    public static void main(String[] args) throws Exception {
        Properties pro = new Properties();//创建properties对象,用于盛放外部引入的类名和类的成员方法

        //引入配置文件
        //1.创建类加载器
        ClassLoader cl = TestClass.class.getClassLoader();//
        //2.根据类加载器,获取配置文件,并转化为IO字节流
        InputStream In = cl.getResourceAsStream("pro.properties");

        //将读取的IO字节流数据放入Properties集合中
        pro.load(In);


        //根据键值对,获取类名和成员方法名
        String className = pro.getProperty("className");
        String methodName = pro.getProperty("methodName");

        //获取class对象
        Class c1= Class.forName(className);

        //使用构造方法,创建对象
        Constructor con = c1.getConstructor();
        Object obj = con.newInstance();

        //获取成员方法,根据对象使用方法
        Method m = c1.getMethod(methodName);
        m.invoke(obj);
    }
}

在这里插入图片描述
使用类2:

className=junit.reflects.Class02Sleep
methodName=sleepMethod
package junit.reflects;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Properties;

public class TestClass {
    public static void main(String[] args) throws Exception {
        Properties pro = new Properties();//创建properties对象,用于盛放外部引入的类名和类的成员方法

        //引入配置文件
        //1.创建类加载器
        ClassLoader cl = TestClass.class.getClassLoader();//
        //2.根据类加载器,获取配置文件,并转化为IO字节流
        InputStream In = cl.getResourceAsStream("pro.properties");

        //将读取的IO字节流数据放入Properties集合中
        pro.load(In);


        //根据键值对,获取类名和成员方法名
        String className = pro.getProperty("className");
        String methodName = pro.getProperty("methodName");

        //获取class对象
        Class c1= Class.forName(className);

        //使用构造方法,创建对象
        Constructor con = c1.getConstructor();
        Object obj = con.newInstance();

        //获取成员方法,根据对象使用方法
        Method m = c1.getMethod(methodName);
        m.invoke(obj);
    }
}

在这里插入图片描述

发布了131 篇原创文章 · 获赞 1 · 访问量 4441

猜你喜欢

转载自blog.csdn.net/wangzilong1995/article/details/104189211
今日推荐