java - Annotation Bind Time(Java中什么时候绑定(bind)注解)

标签 java annotations jvm java-compiler-api

我正在编写代码,其中数据库我的表名必须根据我是在我的开发环境还是生产环境中进行更改。表名被定义为注释,因为我使用的是 Dynomo DB 的高级 API。因此,例如以下代码是否可能以及管理其行为的规则是什么:

static String postfix = "_test"; // (could be set to say _prod, _dev, etc.)

@DynamoDBTable(tableName="sometable" + postfix)
class MyTable {
  ...
  ...

这导致的问题是:

  1. 什么时候在 Java Bound 中使用注解?编译时还是运行时?
  2. 能否在执行中途更改绑定(bind)?

谢谢。

最佳答案

Java 中的注释必须具有在编译时可解析的值。注释中不能有任何运行时信息,因为它是类定义本身的一部分。如果需要运行时信息,则必须由在运行时查找注释的任何人来解决。

至于留存,有3种形式的留存:

  1. Source - 注释由编译器使用(通常用于提示和/或源代码生成)。示例包括@Override 和@SuppressWarnings,并在所有注释处理器有机会看到它们之后被丢弃。 .class 文件中没有记录任何内容。

  2. 类 - 注释保存为 .class 文件本身的一部分,可用于解析类 byte[] 数据的工具(javassist 等),但不是实际的一部分加载的java类对象。

  3. 运行时 - 作为 java Class 对象的一部分,注释从编译时一直到运行时都可用。

关于java - Annotation Bind Time(Java中什么时候绑定(bind)注解),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12547125/

相关文章:

java - VisualVM 的 JVM 调用树快照

java - 我如何安全地处理 JVM 上的 key Material 缓冲区并将其归零?

java - 与外部类同名的内部类?

java - 将jar转换为exe launch4j后出现JNI错误

java - 如何解析泛型类型中的Java注解?

android - 在 kotlin 中定义 StringDef

Java 6 JVM 挂起

java - 如何在 JTextArea 中设置列​​以显示文本

java - TableView 中的删除按钮不会消失

缺少 Android javax.annotation.processing 包。不能使用抽象处理器