网站建设及安全管理,建一个信息 类网站,汉中做网站,代做毕设自己专门网站【案例12-3】#xff1a;利用反射实现通过读取配置文件对类进行实例化
【案例介绍】
1.案例描述
现在有一个项目#xff0c;项目中创建了一个Person类#xff0c;在Person类中定义了一个sleep()方法。在工程中还定义了一个Student类继承Person类#xff0c;在Student类中…【案例12-3】利用反射实现通过读取配置文件对类进行实例化
【案例介绍】
1.案例描述
现在有一个项目项目中创建了一个Person类在Person类中定义了一个sleep()方法。在工程中还定义了一个Student类继承Person类在Student类中重写了Person类的sleep()方法。项目有一个配置文件名称为test.properties在配置文件中配置了一个className属性和一个methodName属性className属性值是类的全限定类名methodName属性值是方法名。
本案例要求通过读取配置文件对类进行实例化具体如下
1获取test.properties配置文件中的className属性值类的全限定类名利用反射对该类进行实例化。
2获取test.properties配置文件中的methodName属性值方法名利用反射获取对象方法并执行该方法。
2.运行结果
情景一
配置文件中的信息 运行结果 情景二
配置文件中的信息 运行结果 【案例目标】
学会分析“利用反射实现通过读取配置文件信息信息对类进行实例化”程序任务实现的逻辑思路。能够独立完成“利用反射实现通过读取配置文件信息对类进行实例化” 程序的源代码编写、编译及运行。掌握反射机制的应用。
【案例分析】
1通过任务描述可知需要先在工程的根目录下创建一个test.properties文件在配置文件中配置一个className属性和一个methodName属性className属性值是类的全限定类名methodName属性值是方法名。
2然后创建两个类Person类和Student类且Student类继承Person类。在Person类中编写一个sleep()方法在Student类中重写Person类的sleep()方法
3最后编写一个测试类ReflexTest在main()方法中编写程序具体步骤描述如下
1.利用反射加载配置文件
2.获取配置文件中的数据获取类的全路径名及方法名
3.根据获取的类的全路径名利用反射将该类加载进内存
4.创建该类对象
5.根据在配置文件中获取的方法名获取对象方法
6.执行方法
【案例实现】
情景一
test.properties
className chapter1203.Person //chapter1203是Person类所在的包名methodName sleep
上述配置文件中定义了classNmae和methodName属性并赋值。
Person.java
package chapter1203;public class Student extends Person{ Override public void sleep() { super.sleep(); System.out.println(呼噜呼噜~~~); } public void s1() { super.sleep(); System.out.println(hello); }}
上述代码中创建了一个Person类并在Person类中编写了一个sleep方法。
Student.java
public class Student extends Person{ Override public void sleep() { super.sleep(); System.out.println(呼噜呼噜~~~); } public void s1() { super.sleep(); System.out.println(hello);}}
上述代码中定义了一个Student类并继承了Person类。在Student类中重写了父类Person中的sleep()方法然后编写了一个s1()方法。
ReflexTest.java
import java.io.IOException;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Properties;public class ReflexTest { public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException,NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException { /*1、加载配置文件 * 用类名.class.getResourceAsStream(xx)或者 * 类名.class.getClassLoader().getResourceAsStream(xx); * * */ Properties properties new Properties(); properties.load(ReflexTest.class.getResourceAsStream( test.properties)); //2、获取配置文件中定义的数据 String className properties.getProperty(className); String methodName properties.getProperty(methodName); //3、加载该类进内存 Class cls Class.forName(className); //4、创建类对象 Object obj cls.newInstance(); //5、获取对象方法 Method method cls.getMethod(methodName); //6、执行方法 method.invoke(obj); }}
上述代码中第15-17行代码利用反射加载了test.properties配置文件第19-20行代码获取配置文件中className和methodName属性的信息第22行代码根据获取的类的全路径名利用反射将该类加载进内存第24行代码创建在配置文件中获取的类的对象第26行代码根据在配置文件中获取的方法名获取对象方法第28行执行该方法。
情景二
只需要修改test.properties配置文件即可。
test.properties
sclassName chapter1203.StudentmethodName s1