|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
到时我们不用学struts,不用学spring,不用学Hibernate,只要能把jsf学会了,完全可以替代所有的框架,包括AJAX,都知道AJAX并不是新技术,虽说我没深入学习jsf但我认为jsf应该已经能通过其它技术替代AJAX,实现无缝刷新。这段工夫瞎忙,这篇文章没有写下往,被人小看是宦官文,忧郁,只好抽工夫持续。
----------------------------
上回说道我们要完成类字节码的静态装载,一个思绪就是不让这个类真实的被装载进假造机,由于一旦真实的装载出去了,就没法对其举行布局上的修正,这些在前文中已提到过了。那怎样才干不让类装载出去可是又能利用它呢?
这看起来像一个悖论,我们要在使用是利用一个类,初始化它,机关它的实例,挪用办法,等等,可是又不克不及装载这个类,这不忽悠人么?
临时不论怎样做到,先看看成绩自己。我们要办理的成绩就是当一个类(比方Worker)已在假造机内里利用了,好比有程序Test援用到了Worker,这时候候,Worker修正过了(Work),字节码更新过了,我们必要在不从头启动jvm的情形下,让Test新倡议的挪用都利用到Work的代码。我们怎样处置呢?
我们的计划:假造机起来的时分,在Test里,发明(TODO1)要利用Worker类,我们装载一个WorkerVersion1给Test利用,当发明(TODO2)Worker类的字节码变更了,我们必要冷静的装载(TODO3)一个WorkerVersion2出去,给Test利用,同时必要不让Test晓得有这个变更。
这几个TODO办理失落了,我们的成绩也差未几了。
*TODO1,监控假造机装载类
这个不难,我们用agent往enhance一下java.lang.ClassLoader,修正findClass/findResource等办法,到场我们本人的反省和装载逻辑,然后redefine这个类便可,没有成绩
*TODO2,监控类字节码变更
在装载这个类的时分,纪录下这个类的来历,比方来自某个目次,来自某个jar,然后在必要的时分反省这个资本是不是改动,假如改动了就倡议从头装载的动静便可,也没啥成绩
*TODO3,从头装载一个变更了的类
这里才是技能的中心,我们在装载类的时分,利用字节码剖析工具(比方asm),间接找到字节码,修正它,天生一个带版本号的类名,比方将Worker修正成Worker_V_1,前往给下面利用,当发明类有修正的时分,我们就装载一个Worker_V_2出来,给下面利用。
什么时候上述的三种开发工具能和三为一,什么时候java的竞争力才更强,才有机会拉拢更多的程序员投入到对java的开发上,因为到时的开发工具将会比.net网页编程的更简单。还有一点也很关键,什么时候java推出的jsf能成为真正意义上的标准。 |
|