普歌-毅雁团队-简单框架的构建

需求:

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

实现:

(1)配置文件
(2)反射

步骤:

(1)将所需要创建的对象的全类名(包名.类名)和需要执行的方法定义在配置文件中
(2)在程序中加载读取配置文件(使用Properties方法)
(3)使用反射技术来加载类文件进内存
(4)创建对象
(5)执行方法

代码演示:

这里就演示一个简单的Student类吧!
(1) 首先创建一个Student类,配备get和set方法,空参和满参,重写toString方法,一个sleep方法和school方法

Student类

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

public Student() {
}

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

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;
}

@Override
public String toString() {
    return "Student{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
}
public void sleep(){
    System.out.println("sleep,打呼噜");
}
public void school(){
    System.out.println("go to school");
}
}
(2)鼠标右键new一个File,输入文件名,配置文件中需要对象的全类名和执行的方法,这边演示Studnt类的两个方法,sleep和school

配置文件:

className=Student//(全类名,这里直接在src内操作,所有可以省略包名,一般都是包名.类名)
methodName=sleep//(sleep方法)
methodName1=school//(school方法)
(3)测试类,读取配置文件,使用反射技术,创建对象,执行方法

测试类:

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

public class ReflectTest {
public static void main(String[] args) throws Exception {
    //创建Properties对象
    Properties p = new Properties();
    //获取class目录下的配置文件
    ClassLoader classLoader = ReflectTest.class.getClassLoader();

    InputStream is = classLoader.getResourceAsStream("puge.yiyan");
    //调用load方法加载配置文件,转换为一个集合
    p.load(is);
    //获取配置文件中定义的数据
    String className = p.getProperty("className");
    String methodName = p.getProperty("methodName");
    String methodName1 = p.getProperty("methodName1");
    //加载该类进内存
    Class cls = Class.forName(className);
    //创建对象
    Object obj = cls.newInstance();
    //获取方法对象
    Method method = cls.getMethod(methodName);
    Method method1 = cls.getMethod(methodName1);
    //执行方法
    method.invoke(obj);
    method1.invoke(obj);


}
}

执行结果:

sleep,打呼噜
go to school

简单框架的构建,你学会了吗?

猜你喜欢

转载自blog.csdn.net/weixin_51749554/article/details/113975388