Java JVM';使用JPDA对Spring加载的类进行热交换

Java JVM';使用JPDA对Spring加载的类进行热交换,java,spring,jvm,hotswap,jpda,Java,Spring,Jvm,Hotswap,Jpda,请大家分享一下他在这个话题上的经验好吗 在tomcat上使用jpda时,即使是通过spring加载的类,类重新加载是否也有效?假设我有一个spring上下文,其中加载并实例化了两个类,我想更改其中一个类中的一个方法 通常,会替换、重新加载该类,并从该类的新版本实例化其他每个实例。我想即使是旧的实例也会被旧的替换掉 当使用弹簧时,这也起作用吗?所以我有一个mvc控制器,我改变了它的方法 或者我必须使用JRebel来满足这个要求。我的经验是,如果您当然不更改方法签名、添加字段等,那么它工作良好且可靠

请大家分享一下他在这个话题上的经验好吗

在tomcat上使用jpda时,即使是通过spring加载的类,类重新加载是否也有效?假设我有一个spring上下文,其中加载并实例化了两个类,我想更改其中一个类中的一个方法

通常,会替换、重新加载该类,并从该类的新版本实例化其他每个实例。我想即使是旧的实例也会被旧的替换掉

当使用弹簧时,这也起作用吗?所以我有一个mvc控制器,我改变了它的方法


或者我必须使用JRebel来满足这个要求。

我的经验是,如果您当然不更改方法签名、添加字段等,那么它工作良好且可靠。更改spring容器(包括MVC控制器)中任何类的任何现有方法的实现应该完全按照预期工作。作为参考,我上一次测试它是使用Tomcat 6、Spring 3,并在远程连接的调试器上使用Netbeans 6.9的“应用代码更改”,但它是Java标准,所以我怀疑IDE会对它产生多大影响


编辑:以上这些都与JRebel无关(我从未使用过它)。

好的,我从来都不喜欢这种热交换,因为我所做的更改大多超出了允许的“热交换”范围。我从不需要更改方法的内容并检查结果。人们通常在写东西时创建另一种方法。然而,考虑到spring上下文和依赖项注入是如何工作的,我想知道热交换甚至对这些类也是有效的。。。也许这一切都在JVM的保护下,对spring来说是不可见的……保留类签名和对象引用等@lisak我可能在这方面错了,但我相信它实际上不需要像你所说的那样重新实例化任何类。该方法的实现是在一个特定的内存地址,它所做的只是更新指向该内存地址的链接以指向不同的位置。因此,它非常快速和可靠,使用Spring或任何其他库都不是问题。