反射案例
- 需求:写一个“框架,可以帮我们创建任意类的对象,并执行其中任意方法。
- 实现:
- 配置文件
- 反射
- 步骤:
- 将需要创建的对象的全类名和需要执行的方法定义在配置文件中
- 在程序中加载读取配置文件
- 使用反射技术来加载类文件进内存
- 创建对象
- 执行方法
首先定义配置文件pro.properties
:
className=com.domain.Student
methodName=sleep
定义两种测试类:
public class Student {
public void sleep() {
System.out.println("sleep...");
}
}
public class Person {
public void eat() {
System.out.println("eat...");
}
}
定义反射测试类:
public class ReflectTest {
public static void main(String[] args) throws Exception {
// 1.加载配置文件
// 1.1创建Properties对象
Properties pro = new Properties();
// 1.2加载配置文件,转换为一个集合
// 1.2.1获取class目录下的配置文件
ClassLoader classLoader = ReflectTest.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream("pro.properties");
pro.load(is);
String className = pro.getProperty("className");
String methodName = pro.getProperty("methodName");
Class cls = Class.forName(className);
Object o = cls.getDeclaredConstructor().newInstance();
Method method = cls.getMethod(methodName);
method.invoke(o);
}
}
若想创建Person
对象且执行eat()
方法,无需修改具体的代码实现部分,仅需修改配置文件pro.properties
为:
className=com.domain.Person
methodName=eat
如果所写的系统十分庞大,修改java代码后,需要重新测试,重新编译,重新上线等等。但是配置文件仅仅只是一个物理文件,修改方便,且让程序的扩展性更强。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!