1

dev環境とprod環境のどちらにいるかに応じて、データベースのテーブル名を変更する必要があるコードを記述していました。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リフレクションを使用すると、おそらくsetAccessible(true); 実行時に注釈を設定します

于 2012-09-22T19:46:39.410 に答える
2

Javaのアノテーションには、コンパイル時に解決可能な値が必要です。クラス定義自体の一部であるため、アノテーションにランタイム情報を含めることはできません。実行時情報が必要な場合は、実行時に注釈を探している人が解決する必要があります。

保持に関しては、3つの形式の保持があります。

  1. ソース-注釈はコンパイラによって使用されます(通常、ヒントやソース生成のために)。例には、@ Overrideや@SuppressWarningsが含まれ、すべてのアノテーションプロセッサがそれらを表示する機会が与えられた後に破棄されます。.classファイルには何も記録されていません。

  2. クラス-アノテーションは.classファイル自体の一部として保存され、クラスbyte []データを解析できるツール(javassistなど)で使用できますが、ロードされる実際のjavaClassオブジェクトの一部ではありません。 。

  3. ランタイム-アノテーションは、コンパイル時から実行時まで、Javaクラスオブジェクトの一部として利用できます。

于 2012-09-22T21:31:40.810 に答える