java 支持注释的热交换吗?
does java support hotswap of annotations?
Afaik,java 对 hotswap 操作有很多限制,例如不允许更改字段或方法名称。那么添加或删除 annotations 字段呢?
如果是的话,除了字段注解还有很多注解如方法注解、class annotations 等这些annotations是否都支持hotswap?
例如,交换前:
class A{
@FieldAnnotation1 int field;
}
之后:
class A{
@FieldAnnotation2 int field;
}
AFAIK, Java has many restrictions on hotswap operations such as not allowing change fields or method names.
这取决于热交换是如何实现的;
如果您通过(比如)替换 servlet 来热交换代码,则这些限制不适用。
对于 IDE 中的热交换,限制因素可能是 IDE 调试器的复杂程度,而不是 Java 本身。
Then what about adding or delete annotations of fields ?
你需要担心的不是Java1。 Java 运行时系统将处理这个问题。就 Java 而言,当您 "hotswap" 一个 class 时,您正在创建一个新的 class。 Java 不知道旧的或新的注释是什么意思,或者实际上新的 class 与旧的 class 有某种关系。只要可以从新的 class 中检索到新的注释,Java 就完成了它的工作。
真正的问题是:
IDE能应付吗?这取决于 IDE.
你用的框架可以应付吗?它是 "understands" 注释含义的框架,包括处理它们的软件。如果通过热交换更改注释,则由该软件对运行时数据结构、行为等进行任何调整。做不做取决于框架。
1 - 我这样说的原因是注释不会直接影响字节码执行或对象或堆栈帧的布局。但是,我必须承认,我找不到关于热交换或其在 JVMTI 级别的限制的任何明确描述。
Afaik,java 对 hotswap 操作有很多限制,例如不允许更改字段或方法名称。那么添加或删除 annotations 字段呢?
如果是的话,除了字段注解还有很多注解如方法注解、class annotations 等这些annotations是否都支持hotswap?
例如,交换前:
class A{
@FieldAnnotation1 int field;
}
之后:
class A{
@FieldAnnotation2 int field;
}
AFAIK, Java has many restrictions on hotswap operations such as not allowing change fields or method names.
这取决于热交换是如何实现的;
如果您通过(比如)替换 servlet 来热交换代码,则这些限制不适用。
对于 IDE 中的热交换,限制因素可能是 IDE 调试器的复杂程度,而不是 Java 本身。
Then what about adding or delete annotations of fields ?
你需要担心的不是Java1。 Java 运行时系统将处理这个问题。就 Java 而言,当您 "hotswap" 一个 class 时,您正在创建一个新的 class。 Java 不知道旧的或新的注释是什么意思,或者实际上新的 class 与旧的 class 有某种关系。只要可以从新的 class 中检索到新的注释,Java 就完成了它的工作。
真正的问题是:
IDE能应付吗?这取决于 IDE.
你用的框架可以应付吗?它是 "understands" 注释含义的框架,包括处理它们的软件。如果通过热交换更改注释,则由该软件对运行时数据结构、行为等进行任何调整。做不做取决于框架。
1 - 我这样说的原因是注释不会直接影响字节码执行或对象或堆栈帧的布局。但是,我必须承认,我找不到关于热交换或其在 JVMTI 级别的限制的任何明确描述。