普歌-简单框架的构建
发布日期:2021-05-07 11:03:17 浏览次数:18 分类:精选文章

本文共 2013 字,大约阅读时间需要 6 分钟。

需求:

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

实现:

(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;}@Overridepublic 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

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

上一篇:MySQL中为什么IP地址最好使用int类型?
下一篇:代码优化

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月10日 15时49分32秒