2012-01-29 15 views
4

最近私は注釈について読んできましたが、少し混乱しています。私は注釈@NotNullを使用しましたが、変数がnullでないかどうかチェックする方法はわかりません。いいえ、コード内でnullの値をチェックするものは何もありません。インターフェイスなので理にかなっています。実際の処理はどこで行われますか?なぜこの場所がコードで指定されていないのですか?私が見た例では、値を取る注釈を作成するだけですが、何もしないので、実装がどこにあるのか混乱します。注釈の処理はどこで行われますか?

答えて

5

注釈は単なるメタデータであり、もはやそれほど重要ではありません。 クラスに関するいくつかの詳細を指定する場合は、そのクラスに注釈を付けます。 メタデータを定義する従来のよく知られているXMLの方法の代わりに、(ある程度まで)それらについて考えてみてください。

誰かがあなたのXMLを読んで、メタデータで何かを作るコードを実行するのは明らかです。注釈でも同じことが起こります。注釈が属するフレームワークは、注釈を読み、この情報で何かを作る責任があります。 @NotNullの場合、そのhibernate-validatorプロジェクト。 javaによって公開されたAPIは、リフレクション(注釈の情報にjava.lang.ClassMethodFieldなどのようなクラス)でアクセスできます。だから、Hibernateバリデーターの中のどこかに、あなたのクラスに行くコードがあります。リフレクションによってアノテーションを読み、クラスがこれらのアノテーションを遵守しているかどうかをチェックします。 これらのアノテーションには、通常、保持ポリシー 'runtime'があります。これは、それらがバイトコードで保持され、これらのアノテーションを保持するクラスとともにロードされることを意味します。

Javaコンパイラで処理する必要がある注釈もあります。 @Deprecated@SuppressWarningsなどのように。そのような注釈を付けることの利点は、コンパイル段階でいくつかのコードの問題を見つけることができることです。

アノテーションプロセッサを配置して、コンパイルフェーズで「プラグイン」することもできますが、全く異なるストーリーです。

これは、アノテーションの使用方法を少し明確にしたいと考えています。

関連する問題