java动态反射调用方法-之------根据配置文件的类的路径和方法名称来调用方法

1.首先反射入门案例

 //可以创建任意类的对象,可以执行任意方法
    @Test
    public void ReflectCase() throws Exception {
        /**
         * 实现思路
         *  1.读取配置文件.获取类名和方法名
         *  2.创建class字节码对象
         *  3.调用方法
         *  4.执行方法
         */
        Properties properties=new Properties();
        //获得类加载器
        /*ClassLoader classLoader = Demo02ReflectCaseTest.class.getClassLoader();
        //使用类加载器读取配置文件
        InputStream resourceAsStream = classLoader.getResourceAsStream("pro.properties");*/
        FileReader fileReader = new FileReader("src\\cn\\web\\day01\\test\\pro.properties");
        properties.load(fileReader);
        //得到类路径值
        String className = properties.getProperty("className");
        //得到方法名
        String methodName = properties.getProperty("methodName");
        //得到类字节码对象-加载该类进内存
        Class aClass = Class.forName(className);
        //得到对象
        Object o = aClass.newInstance();
        //调用方法
        Method declaredMethod = aClass.getDeclaredMethod(methodName);
        declaredMethod.invoke(o);

    }

2.动态反射调用方法
1.配置文件
pro.properties

className=cn.web.day01.reflect.Student
methodName=study

2.定义methodReflectUtils工具类


/**
 * 方法反射
 */
public class methodReflectUtils {
    /**
     * 通过类的路径与方法名和参数列表来反射调用方法
     * @param className
     *              类所在的路径
     * @param methodName
     *              方法的名称
     * @param args
     *          参数的列表
     */
    public static void methodReflect(String className, String methodName, Object[] args) {

        Class[] argsClass = new Class[args.length];

        for(int i=0; i

3.定义测试类 测试方法

 //可以创建任意类的对象,可以执行任意方法
    @Test
    public void ReflectCase() throws Exception {
        Properties properties=new Properties();
        //获得类加载器
        /*ClassLoader classLoader = Demo02ReflectCaseTest.class.getClassLoader();
        //使用类加载器读取配置文件
        InputStream resourceAsStream = classLoader.getResourceAsStream("pro.properties");*/
        FileReader fileReader = new FileReader("src\\cn\\web\\day01\\test\\pro.properties");
        properties.load(fileReader);
        //得到类路径值
        String className = properties.getProperty("className");
        //得到方法名
        String methodName = properties.getProperty("methodName");

        //调用有参方法
        Object []args={"张三",9};
        methodReflectUtils.methodReflect(className,methodName,args);
        //调用有参方法
        Object []args1={};
        methodReflectUtils.methodReflect(className,methodName,args1);

    }

你可能感兴趣的:(java动态反射调用方法-之------根据配置文件的类的路径和方法名称来调用方法)