簡體   English   中英

注釋綁定時間(在Java中綁定注釋的時間)

[英]Annotation Bind Time (When are annotations bound in Java)

我正在編寫代碼,其中數據庫的表名必須根據我是在開發環境還是prod環境中而改變。 由於我使用的是Dynomo DB的高級API,因此表名被定義為注釋。 例如,以下代碼是可能的,以及管理其行為的規則是什么:

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

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

這導致的一系列問題是:

  1. Java綁定中的注釋何時? 編譯時間還是運行時間?
  2. 可以在中途執行中更改綁定嗎?

謝謝。

這取決於如何定義注釋。 “保留”定義它是編譯時還是運行時。

使用java反射你可能會這樣一個setAccessible(true); 並在運行時設置Annotation

java中的注釋必須具有在編譯時可解析的值。 注釋中不能有任何運行時信息,因為它是類定義本身的一部分。 如果需要運行時信息,則必須由在運行時查找注釋的任何人解決。

至於保留,有3種保留形式:

  1. 源 - 編譯器使用注釋(通常用於提示和/或源生成)。 例子包括@Override和@SuppressWarnings,並且在所有注釋處理器都有機會看到它們之后被丟棄。 在.class文件中沒有記錄任何內容。

  2. 類 - 注釋保存為.class文件本身的一部分,並且可用於解析類byte []數據(javassist等)的工具,但不是實際加載的java類對象的一部分。

  3. 運行時 - 作為java Class對象的一部分,注釋可從編譯時一直到運行時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM