欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

反射案列

程序员文章站 2022-06-09 12:57:32
...

反射案列

编写一个简单的框架,可以帮助我们创建任意类的对象,并且可以执行任意的方法。
要求:不改变框架类,实现上述功能
实现思路:

  1. 使用配置文件
  2. 使用反射

实现步骤:

  1. 在配置文件中,配置需要创建的类的全类名和需要执行的方法
  2. 在程序中读取配置文件。
  3. 使用反射技术加载配置的类的文件到内存
  4. 创建全类名对应的对象
  5. 执行配置的方法

实体类对象

package com.cj.entity;

public class Student {
    private String name;
    private int age;
    public  String context;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getContext() {
        return context;
    }

    public void setContext(String context) {
        this.context = context;
    }

    public Student() {
    }

    public Student(String name, int age, String context) {
        this.name = name;
        this.age = age;
        this.context = context;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", context='" + context + '\'' +
                '}';
    }
}

配置文件(myframe.properties)

fullClassName=com.cj.entity.Student
methodName=setContext
methodType=java.lang.String
methodValue=18

main

package com.cj.myframe;

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

public class Frame {
    public static void main(String[] args) {
        Properties properties=new Properties();
        InputStream is=Frame.class.getClassLoader().getResourceAsStream("myframe.properties");
        //加载配置文件,并将配置文件信息封装到properties对象中
        try {
            properties.load(is);
            String fullClassName = properties.getProperty("fullClassName");
            String methodName = properties.getProperty("methodName");
            String methodType = properties.getProperty("methodType");
            System.out.println(methodType);
            String[] strings = methodType.split(",");
            Class[] classes = new Class[strings.length];
            for (int i = 0; i < strings.length; i++) {
                classes[i] = Class.forName(strings[i]);
            }
            String methodValue = properties.getProperty("methodValue");
            System.out.println(methodValue);
            //创建类对象
            Class<?> aClass = Class.forName(fullClassName);
            Object o = aClass.newInstance();
            Method declaredMethod = aClass.getDeclaredMethod(methodName, classes);
            declaredMethod.setAccessible(true);
            declaredMethod.invoke(o, "18");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

相关标签: 案例