让你的Java应用具有动态加载的功能
关键字: Java 编程 动态加载今天看到了javaworld上的一篇文章,该文章讨论了通过结合JVM的类加载机制、Java语言的动态代理技术以及Java的编译技术来实现一个类的动态加载功能,具体可参考http://www.javaworld.com/javaworld/jw-06-2006/jw-0612-dynamic.html。
该文章中给出的源代码中,对Java源代码的编译中依赖于sun的类库,在JDK1.6中,引入了Java的编译API,我们可以修改改代码,让其应用JDK1.6编译API。其实现原理是定期去检查源代码的文件是否被更新,如果被更新了,则重新编译改源代码然后重新载入,更新其类的定义。我们可以考虑基于事件机制,而不是去定期检查源代码的更新情况来实现动态加载。毕竟动态检查源代码对性能还是有消耗的,特别是当源代码文件数比较多的时候。
我的想法是这样子的,用户可以触发一个事件,例如用户可以提供一个类的全名,告诉Java应用这个类已经被修改,该类被修改的事件将被分发到自定义的类加载器中,类加载器收到该事件后重新编译该类文件,生成相应的字节码,然后重新载入。当然为了方便使用,用户不一定要提供一个类的全名,用户可以提供一个包的名字,让后这个包下的所以类将被重新载入,或者更进一步根据正则表达式来匹配。
事实上,最终提供给Java应有的类是由动态代理生成的,在这种机制下,用户不但可以触发类文件被修改的事件,还可以触发其他事件,例如用户可以触发事件让一些类处于调试模式,这个可以用AOP做到,因为我们在创建动态代理的时候可以对其进行增强。当然如果Cache是用AOP来实现的话,用户还可以触发事件告诉Java应用是否进行Cache。而所有这些都是在不用重启应有的情况下做到的。
具体一点,自定义的类加载器可以实现监听者接口,而事件触发器提供方法添加监听器的方法,当相应的事件被触发后所有的注册的监听者将收到改事件信息。^_^,可以考虑在原作者的代码基础上进行更进一步的开发。
发表评论
- 浏览: 11746 次

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
用Maven作为构建(build ...
maven 有一种offline机制,可以不连internet,但是连本地loc ...
-- by 心无旁骛 -
请教JMeter测试WebService ...
使用SoapUI可以自动帮你生成SOAP请求
-- by jnn -
请教JMeter测试WebService ...
netment 写道 JMeter可以用来测试WebService,我们只 ...
-- by fastzch -
请教JMeter测试WebService ...
问好!想和你讨论一下,jmeter对wsdl的支持问题,可否?有时候在做webs ...
-- by xxy_625 -
原来自己喜欢折磨自己
hurricane1026 写道Trustno1 写道Lost Lack Env ...
-- by dovecat






评论排行榜