1

我正在编写代码,其中数据库我的表名必须根据我是在我的开发环境还是生产环境中进行更改。由于我使用的是 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. 可以在执行中途更改绑定吗?

谢谢。

4

2 回答 2

2

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

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

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

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

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

于 2012-09-22T21:31:40.810 回答
2

这取决于注释的定义方式。“保留”定义它是编译时还是运行时。

使用java反射你可能会这样 setAccessible(true); 并在运行时设置注释

于 2012-09-22T19:46:39.410 回答