首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java帝国之风云再起

IO大臣这些年来和线程大臣斗,和XML大臣争,和JDBC大臣抢,发现争来争去、抢来抢去不过是皇上的棋子而已,实在是没什么意思。

他心灰意冷,称病告假,赋闲在家。

如今在家里养养花草,养养小动物,也挺悠闲的。

这一日IO大臣正在拾掇一个名贵的盆景,下人通报有乡下亲戚来访。 IO大臣心想估计又是哪个八竿子打不着的亲戚来借钱了,送几两银子打发了算了。

可是下人说来者是一个小伙子,仪表堂堂,衣帽干净,不是一个穷光蛋,转念一想,反正闲着没事,了解下民间疾苦还是不错滴嘛! 于是吩咐让他在书房召见。

小伙子一见到IO大臣,立刻迎上前去行礼,自报家门说:“大人,小人名叫李忠,也是您老老家XXXX地方的人,大人为Java帝国建了这么多的功业,功勋卓著,家乡人都以大人您为荣啊,已经打算为您立一个石碑了!”

IO大臣微微点头,马屁拍得太多了,都没有感觉了,看到桌子上不菲的礼品,心想还是切入正题吧。

“小李,此次来京城有何贵干?”

小李说:“小的不才,只考中了秀才,一直在老家靠写Java程序为生,最近小人打算写一个MVC的框架,方便家乡的人开发Web程序,但是发现Java中缺失了一个重要的功能,进行不下去了!”

能写框架 ? 看来这位秀才有两把刷子。

“缺了什么功能啊?”

“大人,我们家乡的人在写Web程序的时候,经常需要把一个URL和一个Java类/方法关联起来,比如http://localhost:8080/hello, 对于/hello这个URI,大家希望由HelloWorld这个Java类来执行,对于http://localhost:8080/add, 大家希望由Calculator这个类的add()方法来执行。” 说完小李抬头看了一眼。

IO大臣点头表示理解。

“为了实现这样的功能,我们得写不少重复的代码,小人就想,要不我写个简单的MVC框架,把HTTP请求封装起来,通过配置文件的方式让大家把一个URL和Java类关联起来,这样就省了好多事情了。比如像下面这样”

IO大臣也是经历过大风大浪的老手,他马上就明白了,这是一个不错的办法啊,当你在浏览器中输入http://xxxxxx/add?num1=10&num2=20的时候, 这个框架就可以把HTTP请求封装起来,然后读取这个XML的配置文件(哼,该死的XML老头儿), 就知道由Calculator这个类来处理,可以new 出来一个Calculator的对象,调用add方法即可,嗯,还需要想办法把num1,num2这样的参数给传入进来,最好也弄点配置.... IO大臣越想越深入。

“大人?” 小李看到IO大臣入神了,轻声提醒。

“哦......”,IO大臣从沉思中惊醒, “后生可畏啊,小李子,你这个想法非常不错,你刚才说Java缺少了一个什么重要功能来着?”

“是这样的,大人,我们不是要读取这个XML配置文件,然后去创建那个Calculator类的对象吗?”

“你直接new出来不就行了吗?”

“大人请注意,我的框架想创建这个类的实例是在运行时,不是在编译时,我只知道类的名字,这只是一个字符串,没法new啊!

IO大臣立刻明白了,小李子的MVC框架是事先写好的,事先并不知道用户要创建一个Calculator对象,还是一个HelloWorld对象,他只知道一个字符串的类名,没法创建类的实例出来。

即使创建出这个Calculator对象,还需要从执行相关的方法,但是MVC框架只知道方法名称,这也是个字符串("add"),怎么去执行啊?

“那你怎么不向当地的官府反映下? ”

“这个......”

“有话直说!”

“现在大人您不怎么上朝,在家修身养性,可能不知道朝中局势大变,我们家族的人,只要是和大人您有点关联,都会受到打压,我去官府反映了,可是被一顿棍棒给打了出来啊。”

IO大臣勃然大怒,这还了得,老夫这才休息了多久?就被人欺负成这个样子!

冷静下来一想,不怪别人,还是自己疏忽了。

他叫来幕僚InputReader,支开无关闲杂人等(上次的间谍事件让人心有余悸)。

InputReader了解了情况,沉思片刻说:

“概括起来有这么几层意思:

1.要能通过一个类的名称(字符串)来创建对象;

2.根据方法名称(字符串)来执行方法;

3.还应该通过一个类的名称来查看这个类有哪些字段,哪些方法。

所有的这些都应该发生在运行时, 这种能力确实是我们帝国所欠缺的。”

小李听到InputReader的总结,心里非常佩服。

IO大臣说:“这其实就是程序在运行时检视自己或他人的一个能力啊! 我们叫他反射(Reflection)怎么样? 对了,Python王国,Ruby王国有这样得东西吗?”

IO大臣这么问,其实也是为了增加一个砝码,人家有的东西,我们Java也要有。

“他们都是动态语言,在运行时给一个对象添加方法、修改方法都不在话下,更不用说反射了!” InputReader说道。

“那就这样,明日早朝,我给皇上上一个奏章。争取把这个反射给实现了!”

InputReader 看到一直以来精神萎靡的IO大臣精神抖擞,准备再战,自己的升官梦又死灰复燃,激动万分:“大人,我来起草奏章吧。”

IO大臣说:“嗯,你一定要把反射的API给定义好。”

“遵命!”

到了晚上,InputReader拿出了一个初步的版本:

三人一直研究到半夜,又增加了很多新的内容,例如获取接口、获取父类..... 总而言之,几乎所有的信息都可以通过反射来得到。

第二天早朝,IO大臣在XML大臣,线程大臣,JDBC大臣狐疑的目光中走入了大殿,心说这老头儿怎么又开始活跃起来了呢?

IO大臣向死对头们不屑地瞥了一眼,便开始向皇上慷慨陈词,陈诉反射的种种好处,顺便向皇上大倒苦水,添油加醋地说自己家族的人被欺凌的经历,还不失时机地表达了老骥伏枥志在千里,还能再效忠陛下的决心。

皇上听到IO大臣的遭遇,大为同情,差点就被说动了,但转念一想,朝中各个大臣的均势已经维持了一段时间,如果IO大臣东山再起,平衡势必要被打破。

他狠了狠心,说道:“爱卿年事已高,就不要再折腾了,朝中任务繁忙,万一有点闪失朕也无法向天下交代啊,还是在家中颐养天年吧!”

IO大臣心里一阵悲苦, 完了,彻底完了,不过无论如何我得留一个后手,他说道:“陛下,这个反射的功能对框架而言意义重大,Java帝国想繁荣昌盛,也离不开各种总各样框架的支持,另外别的王国都有这个功能,陛下不可不察。臣手下的InputReader,深谋远虑,可以承担此等重任。”

别的王国也有这个功能!皇上彻底被打动,看到IO大臣悲催的脸色,也有些于心不忍,他说道:“准奏,由InputReader任Reflection大臣!”

IO大臣心中一阵宽慰,他的的那些死敌们本来想反对,但是对这个所谓的反射确实不了解,只能听之任之了。

三个月后,Java Reflection正式推出,可以在运行时对一个类进行各种操作:查看字段/方法,设置字段/方法的权限,创建对象,调用指定的方法。所有这些,都可以通过“名称”来进行。

Java Reflection是JDK中一项非常基础、非常重要的技术,臣民们大为喜欢,利用它实现了各种各样的框架,如Spring,Hibernate, Struts,Java帝国空前繁荣。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180130B0FD5N00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券