Java 是否支持注解热插拔?



Afaik,Java对热交换操作有很多限制,例如不允许更改字段或方法名称。那么添加或删除字段注释呢

如果是这样,除了字段注释之外,还有很多种类的注释,例如方法注释,类注释等。这些注释是否都支持热插拔?

例如,在交换之前:

class A{
@FieldAnnotation1 int field;
}

后:

class A{
@FieldAnnotation2 int field;
}

AFAIK,Java对热交换操作有很多限制,例如不允许更改字段或方法名称。

这取决于热插拔是如何实现的;

  • 如果您通过(例如(替换 servlet 来热交换代码,则这些限制不适用。

  • 对于 IDE 中的热交换,限制因素可能是 IDE 调试器的复杂性,而不是 Java 本身。

那么添加或删除字段注释呢?

您需要担心的不是 Java。Java 运行时系统将处理这个问题。 就Java而言,当你"热交换"一个类时,你正在创建一个新类。 Java不知道旧注释或新注释的含义,或者实际上新类与旧类有某种关系。 只要可以从新类中检索到新的注解,Java就完成了它的工作。

真正的问题是:

  • IDE 能应付吗? 这取决于 IDE。

  • 您正在使用的框架可以应对它吗? 它是"理解"注释含义的框架,并包括处理它们的软件。 如果通过热交换更改注释,则由该软件对运行时数据结构、行为等进行任何调整。 它是否这样做将取决于框架。


1 - 我这样说的原因是注释不会直接影响字节码执行或对象或堆栈帧的布局。 但是,我必须承认,在JVMTI级别,我找不到任何关于热交换或其限制的明确描述。

最新更新