配置文件与反射案例
案例:写一个框架,该框架可以帮我们创建任意类对象,并且执行其中的任意方法
案例实现:
1.Person类与其中的eat方法
package cn.raincoding;
public class Person {
public void eat() {
System.out.println("eat...");
}
}
2.Sleep方法与其中的sleep方法
public class Sleep {
public static void main(String[] args) {
System.out.println("sleep....");
}
}
3.配置文件pro.properties
className = cn.raincoding.Person
Method = eat
4.主类
步骤:
操作配置文件…
1.创建properties对象,把pro.porperties配置文件加载进内存(load方法中的参数需要pro.porperties的字节流对象)
1.1 先用类加载器把主类加载进内存
1.2 从加载后的主类出发找到配置文件pro.properties,并获得其字节流对象
2.获取配置文件中的数据
开始反射…
1.加载某类进内存
2.创建类的对象
3.获取对象的方法
4.执行方法
主类代码:
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;
public class Test_reflection {
public static void main(String[] args) throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
//1.创建Properties对象
Properties pro = new Properties();
//2.定义一个类加载器对象,并把Test_reflection加载进内存
ClassLoader classLoader = Test_reflection.class.getClassLoader();
//3.得到配置文件pro.properties的字节流对象
InputStream is = classLoader.getResourceAsStream("pro.properties");
//4.加载字节流进内存
pro.load(is);
//5.获取配置文件中定义的数据
String className = pro.getProperty("className");
String methodName = pro.getProperty("Method");
//反射开始
//1.加载该类进内存
Class cls = Class.forName(className);
//创建对象
Object obj = cls.newInstance();
//获取方法对象
Method amethod = cls.getDeclaredMethod(methodName);
//执行方法
amethod.invoke(obj);
}
}