2016-02-18 10 views
5

注釈を使用すると、プログラムはClassNotFoundExceptionを投げません。JVMが注釈クラスをロードするのはいつですか

class A { 
     @Transactional 
     public void insert() { 
      //insert something 
     } 
    } 

Tomcatのは、それは私は非常に混乱になり、クラスjavax.transaction.Transactional

が含まれていたJavaEE-API-7.0.jarなしsuccessefully開始し、JVMは ClassNotFoundExceptionは、それがロードするときに投げるべきではありませんクラスA

+0

Tomcatは独自の 'Transactional'アノテーションを定義していませんか? – DonyorM

+0

この回答は参考になるかもしれません:http://stackoverflow.com/a/23502439/1466267 – SpaceTrucker

+0

@DonyorMはい、私は確かにリフレクションによって注釈を取得すると、ClassNotFoundExceptionをスローします。 – hhhyyq

答えて

5

いいえ、そうではありません。アノテーションは単なるメタデータです。アノテーションがクラスパスにない場合でも、アノテーションを含むバイトコードが正常に動作することが期待されます。もちろん、一部のライブラリがクラスパスにない注釈に実際にアクセスして使用しようとすると、それは機能しません。

これは、明示的に生産に

  • を、コードを実行するときになしに使用されているFindBugsのようなバイトコードの静的解析ツールで使用する注釈を追加するために例えば

    • 、できるようにするためにサポートされていますサーバがJPAアノテーションを実際に使用する唯一のサーバであるにもかかわらず、クライアント内の独立したJPAエンティティを使用できるようにするには
  • +0

    よくできた答えをありがとう。 – hhhyyq

    関連する問題