一、思路
- 需求:写一个框架,不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法
- 实现:
- 1.配置文件
- 2.反射
- 步骤:
- 1.将需要创建的对象的全类名和需要执行的方法定义在配置文件中
- 2.在程序加载读取配置文件
- 3.使用反射技术来加载类文件进内存
- 4.创建对象
- 5.执行方法
二、实现代码
//Person类
public class Person {
private String name;
private int age;
public String a;
protected String b;
String c;
private String d;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
// TODO Auto-generated constructor stub
}
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 "Person [name=" + name + ", age=" + age + ", a=" + a + "]";
}
public void eat() {
System.out.println("吃");
}
public void eat(String food) {
System.out.println("吃" + food);
}
//Student类
public class Student {
public void sleep() {
System.out.println("sleep...");
}
}
、
//利用反射实现的框架
//加载配置文件
//1.1创建properties对象
Properties pro = new Properties();
//1.2加载配置文件,转换为一个集合
//1.21获取class目录下的配置文件
ClassLoader classloader = ReflectTest.class.getClassLoader();
InputStream is = classloader.getResourceAsStream("pro.properties");
pro.load(is);
//2.获取配置文件中定义的数据
String className = pro.getProperty("className");
String methodName = pro.getProperty("methodName");
//3.加载该类进内存
Class cls = Class.forName(className);
//4.创建对象
Object obj = cls.getDeclaredConstructor().newInstance(); //注意:这里的newInstance()方法已经被java抛弃,需要进行调整
//5.获取方法对象
Method method = cls.getMethod(methodName);
//6.执行方法
method.invoke(obj);
配置文件:
运行结果:
之后我们仅需要修改配置文件中classname和methodName的内容即可。
运行结果:
轻松利用框架实现不同类不同对象不同方法在同一结构下的调用。