最终静态值在重新部署 JBoss AS 战争后未更新



以下是我所做的:

  1. 编译了包含更改后的最终静态值的文件
  2. 用步骤1中编译的文件更新服务器中对应的.class文件
  3. 将"xxx.war.deploy"更改为"xxx.war.dodeploy"以重新部署战争

在这之后,我想最终的静态值应该更新,但它没有。

只是我删除了整个战争文件,上传并再次部署。值最终更新。

那么,是什么原因造成的呢?最终静态值的使用寿命是否与JVM相同?

基元或字符串类型的静态最终变量实际上是编译时常数,因此,无论它们在哪里使用,都会直接内联。因此,您将丢失对原始类的引用,并且当该类更改时不会发生更新。您需要完全重新编译。

有很多方法可以解决这个问题,但没有一种特别令人愉快。例如,您可以使用static方法来返回常数值。

这是由于静态变量在ClassLoader加载类时被Loaded,而在可以卸载类时被卸载,而当使用的ClassLoader被垃圾收集时可能会发生这种情况。

最新更新