注釈を読む方法とタスクがない場合、注釈は注釈よりも有用ではありません。注釈を使用するプロセスの重要な部分は、注釈プロセッサを使用して作成されます。 Javase5は反射メカニズムAPIを拡張して、プログラマーがカスタム注釈プロセッサをすばやく構築できるようにします。
注釈付きプロセッサクラスライブラリ(java.lang.reflt.annotatedElement):
Javaは、注釈インターフェイスを使用して、プログラム要素の前での注釈を表します。これは、すべての注釈タイプの親インターフェイスです。さらに、Javaはjava.lang.refllectパッケージの下にAnnotatedElementインターフェイスを追加しました。このインターフェイスは、プログラムの注釈を受け入れることができるプログラム要素を表します。インターフェイスには主に次の実装クラスがあります。
クラス:クラスの定義
コンストラクター:コンストラクターの定義
フィールド:累積メンバー変数定義
方法:クラスのメソッド定義
パッケージ:クラスのパッケージ定義
java.lang.Reftlectパッケージには、主に反射関数を実装するツールクラスが含まれています。実際、java.lang.refllectパッケージによって提供されるすべての反射APIは、ランタイムアノテーション情報を読み取る機能を拡張します。アノテーションタイプが実行時に注釈として定義される場合、アノテーションは実行時にのみ表示され、クラスファイルがロードされたときにクラスファイルに保存された注釈は仮想マシンによって読み取られます。
AnnotatedElementインターフェイスは、すべてのプログラム要素(クラス、メソッド、およびコンストラクター)の親インターフェイスです。したがって、プログラムが反射を通じて特定のクラスの注釈を取得した後、プログラムは、注釈情報にアクセスするためにオブジェクトの次の4つの方法を呼び出すことができます。
方法1:<TextEndSannotation> tgetAnnotation(class <t> annotationClass):プログラム要素に存在する指定されたタイプのアノテーションを返します。タイプの注釈が存在しない場合は、nullを返します。
方法2:annotation [] getAnnotations():プログラム要素に存在するすべての注釈を返します。
方法3:booleanisannotationpresent(クラス<?extendsannotation> annotationclass):プログラム要素に指定されたタイプの注釈が含まれているかどうかを判断します。それが存在する場合、それはtrueを返し、それ以外の場合はfalseを返します。
方法4:annotation [] getDeclaredAnnotations():この要素に直接存在するすべてのコメントを返します。このインターフェイスの他の方法とは異なり、この方法は継承された注釈を無視します。 (この要素に直接コメントが存在しない場合、長さゼロの配列が返されます。)メソッドの発信者は、返された配列を自由に変更できます。これは、他の発信者によって返される配列に影響を与えません。
シンプルな注釈プロセッサ:
/********************* Notation Annotation宣言*********************** //// ***フルーツ名アノテーション*@author peida**/ @ターゲット(elementtype.field)@retention(retentionpolicy.runtime)@documentedpublic @interface furtname { @innot( @********************* */ @ターゲット(elementType.field)@retention(retentionPolicy.runtime)@documentedpublic @interface furtcolor {/** * color enum * @author peida * */public enum color {bule、Red、Green};/** * color属性 * @return */color Fruitolor Anntest; @author peida**/ @ターゲット(elementType.field)@retention(retentionPolicy.runtime)@documentedpublic @interface furtyprovider {/***サプライヤー番号* @return*/public int id()デフォルト-1;/***サプライヤー名* @return*/public String*/jufation ";}/****************** Annotationは****************************************************** {@fruitname(" apple ")プライベートストリングアップルモラメント; @fruitcolor(fruitcolor = color.red)プライベートストリングApplecolor; 89、ヤンアン・ロード、xi'an市、シャーンクシ州 ")プライベートストリングアップルプロバイダー; public void setApplecolor(String Applecolor){this.AppleColor = Applecolor;} public String getAppLecolor(){Return Applecolor;} Public Applename(String Applename;} getApplename(){return applename;} public void setAppleProvider(String AppleProvider){this.AppleProvider = appleProvider;} public String getAppleProvider(){return appleProvider;} public void displayName(){System.out.out.Outln Apple ");}}/********************************************************************************************* {cublic static getFruitinfo(class <?> clazz){string strfruitname =" furty name: " clazz.getDeclaredfields(); for(field:fields){if(field.isannotationspresent(fruitname.class)){fruitname fruitname =(fruitname)field.getanname.class); strfruitname = strfruitname+fruitname.value( if(field.isannotationpresent(fruitcolor.class)){fruitcolor fruitcolor =(fruitcolor)field.getannotation(fruitcolor.class); strfruitcolor = strfruitcolor+fruitcolor.fruitcolor() if(field.isannotationPresent(FruitProvider.Class)){FruitProvider FruitProvider =(FruitProvider)Field.GetAnnotation(FruitProvider.Class); StrfruitProvicer = "サプライヤー番号:"+FruitProvider.id() "サプライヤー名:"+FruitProvider.Name() "Supplieder()+ 「+FruitProvider.Address(); System.out.println(strfruitprovicer);}}}}/************************* results result ****************************/ {FruitInfoutil.getFruitinfo(Apple.Class);}}} ==============================================================================建物、89号、ヤンアン・ロード、Xi'an市、Shaanxi州基本的に、Java Annotationsの基本的な知識ポイントを読みました(以下のマップを参照)。次の記事では、注釈に基づいてシンプルなORMフレームワークを設計して、注釈のさまざまな知識ポイントの理解と適用を包括的に適用し、さらに深めることができます。
要約します
上記は、この記事のJava Annotationプロセッサの簡単な例についてのすべてです。誰にとっても役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!