@interface
關鍵字表示本類爲註解類,類結構:
public @interface 自定義註解名 { 自定義註解體 }
註解體中支持的元素類型:
1.所有基本數據類型(int,float,boolean,byte,double,char,long,short)
2.String類型
3.Class類型
4.enum類型
5.Annotation類型
6.以上所有類型的數組
簡單示例:
public @interface SecurityCheck {
boolean open() default false;
SecurityCheckType[] checkTypes();
boolean justLimitFailure() default false;
String rule() default "";
}
定義好註解後即使用,使用示例:
@SecurityCheck(open = true, justLimitFailure = true, checkTypes = SecurityCheckType.IP)
jdk提供了幾個配置/註解來配合/規範註解類的使用,一般定義於註解類上,下面一起看一下。
1.@Target
主要用於規定註解使用的位置,參考下表(表格出自 http://blog.csdn.net/snakemoving/article/details/74364351)
取值 | 註解使用範圍 |
METHOD | 可用於方法上 |
TYPE | 可用於類或者接口上 |
ANNOTATION_TYPE | 可用於註解類型上(被@interface修飾的類型) |
CONSTRUCTOR | 可用於構造方法上 |
FIELD | 可用於域上 |
LOCAL_VARIABLE | 可用於局部變量上 |
PACKAGE | 用於記錄java文件的package信息 |
PARAMETER | 可用於參數上 |
例子:@Target({ ElementType.METHOD }) 表示該註解用於方法上
2.@Retention
主要功能是定義註解保留時間的長短,可以設置的三個值都出自RetentionPolicy
public enum RetentionPolicy
{
SOURCE, CLASS, RUNTIME;
private RetentionPolicy() {}
}
SOURCE:在源文件中有效(即源文件保留)CLASS:在class文件中有效(即class保留,默認策略)
RUNTIME:在運行時有效(即運行時保留,可以通過此級別獲取註解信息)
例子:@Retention(RetentionPolicy.RUNTIME) 也是一般用法
3.@Documented
僅僅作爲一個標記註解,說明該註解類應該被javadoc工具記錄(默認情況下是不記錄的),不在代碼運行時產生影響。
4.@Inherited 待整理,沒搞懂