+カスタム注釈ロギングアスペクト指向の統合モジュール(A)

一般的なコメントでのJava

JDK自身のノート

  • @Override:私は、インターフェイスメソッドを書き換えるようにコンパイラに伝えます
  • @deprecated:廃止され、この方法は、推奨されていないコンパイラに伝える、井出はメソッドを介して線を描画します
  • Closeメソッドを警告が表示されます:@SuppressWarnings( "廃止")

元のメモ

メタアノテーションは、我々は一般的に、カスタム注釈を使用して他のコメントの役割、あなたは、私たち自身のノートをマークするには?4元のノートの合計をメタアノテーションを使用する必要があると指摘します

ターゲット@ 1:注釈は、範囲を記載した修飾、パッケージ、型(クラス、インタフェース、列挙、注釈型)、メンバーの種類(メソッド、コンストラクタ、メンバ変数列挙値)、メソッドのパラメータのために使用することができますローカル変数(例えば、可変ループ、キャッチパラメータ)。注釈型宣言でターゲットを使用して、ターゲットを変更したものより明確にすることができます

例:@Target(ElementType.TYPE)
1.ElementType.CONSTRUCTOR:用于描述构造器
2.ElementType.FIELD:用于描述域(类的成员变量)
3.ElementType.LOCAL_VARIABLE:用于描述局部变量(方法内部变量)
4.ElementType.METHOD:用于描述方法
5.ElementType.PACKAGE:用于描述包 6.ElementType.PARAMETER:用于描述参数 7.ElementType.TYPE:用于描述类、接口(包括注解类型) 或enum声明 

保持@ 2.:実行している場合にのみクラスにコンパイルされたソースコードの一部を残して、注釈が予約された時間の長さを規定することは時々保持する必要があり、いくつかのプログラムは、予約を必要とします。ノートのライフサイクルを記述する

例:@Retention(RetentionPolicy.RUNTIME)
1.RetentionPoicy.SOURCE:在源文件中有效(即源文件保留)
2.RetentionPoicy.CLASS:在class文件中有效(即class保留) 3.RetentionPoicy.RUNTIME:在运行时有效(即运行时保留) 

3. @文書化:それは公共のAPIプログラムのメンバーがマークされているようである必要があり、それは、このようなJavadocドキュメントなどのツールとなり得ることは、注釈の他のタイプを記述するために使用される、ノートのメンバーではない、マーカー注釈であります

4. @継承:それも継承され、その役割は、その種類によってマークされている注釈タグ、クラスがタグ付けされ@Inheritedなどは、サブクラスがクラスを継承した後、この注釈が使用されていますこのクラスのサブクラスインチ

注:修飾@Inheritedのタイプ後、クラスは、それが注釈を実装するインターフェイスから継承するオーバーロードされたメソッドから注釈メソッドを継承していないではありません。

カスタム注釈

カスタム注釈形式:

公共@interface注釈定義体名} {

使用@interfaceは、定義された?方法は、実際にはそれぞれが自動的java.lang.annotation.Annotationインタフェースを継承アノテーションは、構成パラメータを宣言する。メソッドの名前は、戻り型が型パラメータ(戻り値型は、基本的なタイプ、クラス、文字列、列挙型であってもよい)であり、パラメータの名前です。あなたは、デフォルトでは、パラメータのデフォルト値を宣言することができます。

パラメータは、データ型をサポートすることができます注:

1.所有基本数据类型(int,float,boolean,byte,double,char,long,short) 2.String类型 3.Class类型 4.enum类型 5.Annotation类型 6.以上所有类型的数组 

メンバーは注意その注釈点の定義:最初、唯一そのような文字列値として、これら2つの変更、()へのアクセス公共または既定(デフォルト);ここで、デフォルトの方式が設定されているdefaulタイプ;. 

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface userName { String value() default ""; } 

  第二に、基本的なパラメータのメンバーは、タイプがバイト、ショート、CHAR、int型、長い、フロート、ダブル、ブール8つの基本データ型と文字列、列挙型、クラス、注釈および他のデータ型と同様に、この配列のいくつかのタイプを使用することができます。

//定义一个枚举
public enum RequestMethod {
	GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
}


@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME) @Documented @Mapping public @interface RequestMapping { String name() default ""; String[] path() default {}; RequestMethod[] method() default {};//枚举数组 } 

第三に、唯一つのパラメータのメンバーが、それは括弧を追加した後、パラメータ名「値」を設定するのが最善である場合。

ノートのデフォルト

ノート要素は、明確な価値を持っている必要があります?それともデフォルト値、または使用する値を指定します。しかし、時には我々はそれが空の文字列または負の数である、要素の式の値が存在しないかを決定する必要がある要素が存在しないことを示しノートを定義するとき、それは大会の使用状況となっています。

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface User { public int id() default -1; public String name() default ""; public String address() default ""; } 

補足注釈のための@Inherited

キャプションを入力

結論:親クラスのクラスとメソッドは、カスタム注釈であり、@Inheritedマークであり、その後、親がノートを継承するサブクラスの場合にのみ継承します。リライト、過負荷に、これらの親の実装では、親クラスのノートを継承しません。

記事のリンク:https://my.oschina.net/itgaowei/blog/1602277

おすすめ

転載: www.cnblogs.com/danceIt/p/11301310.html