当前位置:  开发笔记 > 编程语言 > 正文

在运行时更新Java代码

如何解决《在运行时更新Java代码》经验,为你挑选了2个好方法。

大约一年前,我偶然发现了Java中的一个很好的功能,我无法再为我的生活找到它.

通过一些神奇的界面,显然可以在运行时声明一些可替换的类或函数.
我发现了一个很好的示例指南,有人运行了一个简单的小程序,打印出某个消息,然后他使用我不记得的方法更新了程序,突然之间程序用新的替换了旧的打印功能.

我试过通过Java API来激发我的记忆以及谷歌搜索,但没有成功.这里有人可以帮忙吗?



1> Jon Skeet..:

各种app容器都可以做到这一点.

基本上你需要重新加载一个新的类ClassLoader(除非你在调试器下讨论这个,在这种情况下,有完全不同的API可用).

在我看来,这种事情很少值得麻烦:设计一切以便可以重新加载比设计它要困难得多,因此它可以在新的过程中完全重新启动.如果过程中只加载了一个版本,那么确定运行的代码也更容易确定.

能够演示是一件很好的事情,但对于大多数应用来说,这是不值得的.在我看来,当然:)

请注意,一个值得注意的例外是能够在不重新启动容器的情况下重新加载Web UI层:这可以使生活轻松.


小心,不要说在Lisp或Erlang程序员附近太大声.

2> ewernli..:

热插拔技术是一种添加到Java 1.4,使类文件替换在运行时。该功能是通过工具包的redefineClasses方法提供的。我认为您也可以通过JPDA界面执行此操作。

这也是我认为首先描述HotSwap机制的研究论文的参考:

寻求灵活安全的Java语言应用程序运行时进化技术

否则,您可以使用Classloader,如其他提到的那样,但它仅提供动态的类加载,而不提供替换。两次加载相同的类将被视为两种不同的类型。结合界面和/或一些反射,它可以提供在运行时更新应用程序的方法。

这是对有关类加载器的出色论文的引用,以及那里的用法:

Java虚拟机中的动态类加载

我不会就这是好是坏进行扩展,因为这不是您的问题,但是我认为拥有对运行时软件演化的支持真是太好了–可惜的是JSR-117从来没有做到!

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有