资讯专栏INFORMATION COLUMN

Java进阶之反射的简单应用:通过反射运行配置文件内容

lingdududu / 860人阅读

摘要:其实这只是一个简单的小例子,目的是让大家知道这种思想,这种思想是很重要的,而框架就是基于反射机制,通过修改配置文件来实现需求。

现在有三个类:Student、Teacher、Doctor和一个测试类:Test,先上代码:

public class Student {
    public void love()
    {
        System.out.println("爱编程,爱Java");
    }
}
public class Teacher {
    public void love() {
        System.out.println("只爱学生");
    }
}
public class Doctor {
    public void love() {
        System.out.println("专治各种不服");
    }
}
public class Test{
    public static void main(String[] args)
    {
        Student s=new Student();
        s.love();
        
        //Teacher t=new Teacher();
        //t.love();
        
        //Doctor d=new Doctor();
        //d.love();
        
    }
}

如果按照以上的方法,每一次需求变更,这一次是Student类,下一次是Teacher类,再下一次是Doctor类,那岂不是每一次都要改源程序?(其实在实际开发中经常遇到需求变更)那可不可以不改源程序就能应对大量的需求变更呢?答案是可以的,通过Java给我们提供的反射机制,不改源程序,只对配置文件做修改即可。下面附上代码和配置文件内容:

public class Test {

    public static void main(String[] args) throws Exception {
        
        //Properties类用于读取配置文件的键值对
        Properties p=new Properties();
        FileReader fr=new FileReader("class.txt");
        p.load(fr);
        //通过键获得值
        String className=p.getProperty("className");
        String methodName=p.getProperty("methodName");
        //创建字节码文件对象,获得无参构造方法对象
        Class clazz=Class.forName(className);
        Constructor con=clazz.getConstructor();
        //通过构造方法获得实例对象
        Object obj=con.newInstance();
        //获得成员方法对象
        Method met=clazz.getDeclaredMethod(methodName);
        //调用方法
        met.invoke(obj);
        
    }

}
className=com.ls.reflect.Doctor//注意,这里是  包名.类名
methodName=love

   注释已经很详细了,以后只需改配置文件就行了。

   其实这只是一个简单的小例子,目的是让大家知道这种思想,这种思想是很重要的,
   而Spring框架就是基于反射机制,通过修改配置文件来实现需求。

   所以学好反射能更加清楚地了解Spring框架。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66258.html

相关文章

  • Java相关

    摘要:本文是作者自己对中线程的状态线程间协作相关使用的理解与总结,不对之处,望指出,共勉。当中的的数目而不是已占用的位置数大于集合番一文通版集合番一文通版垃圾回收机制讲得很透彻,深入浅出。 一小时搞明白自定义注解 Annotation(注解)就是 Java 提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Annotion(注解) 是一个接口,程序可以通过...

    wangtdgoodluck 评论0 收藏0
  • PHP 进阶路 - 后端多元化快速切入 Java 开发

    摘要:以实现自己熟悉的东西为导向比如我们做后端开发,首先是常用的循环迭代条件判断增删改成。它是由实现的,不保证元素的顺序,也就是说所说元素插入的顺序与输出的顺序不一致。 下面是我直播的文字版,直播地址:https://segmentfault.com/l/15...代码:https://github.com/zhoumengka...整个项目我们我又细分了6个版本来演进,希望更加便于大家对比...

    Cristic 评论0 收藏0
  • PHP 进阶路 - 后端多元化快速切入 Java 开发

    摘要:以实现自己熟悉的东西为导向比如我们做后端开发,首先是常用的循环迭代条件判断增删改成。它是由实现的,不保证元素的顺序,也就是说所说元素插入的顺序与输出的顺序不一致。 下面是我直播的文字版,直播地址:https://segmentfault.com/l/15...代码:https://github.com/zhoumengka...整个项目我们我又细分了6个版本来演进,希望更加便于大家对比...

    xi4oh4o 评论0 收藏0
  • Java深入-框架技巧

    摘要:从使用到原理学习线程池关于线程池的使用,及原理分析分析角度新颖面向切面编程的基本用法基于注解的实现在软件开发中,分散于应用中多出的功能被称为横切关注点如事务安全缓存等。 Java 程序媛手把手教你设计模式中的撩妹神技 -- 上篇 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样…… Java 进阶面试问题列表 -...

    chengtao1633 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<