介紹
最近想深入了解一下java,就想到了來讀一讀java源碼。下面是我們的jdk版本炸枣,以及java注解所在的包。注解本質(zhì)是一個繼承了Annotation的特殊接口,其具體實現(xiàn)類是Java運行時生成的動態(tài)代理類适肠。通過代理對象調(diào)用自定義注解(接口)的方法霍衫,會最終調(diào)用AnnotationInvocationHandler的invoke方法。該方法會從memberValues這個Map中索引出對應(yīng)的值侯养。而memberValues的來源是Java常量池敦跌。
jdk版本1.8
package java.lang.annotation;
可以看的java注解在 rt.jar 下面的java.lang.annotation包中。
注解的分類
Java 1.5中開始引入的Annotation逛揩,類似于注釋解釋的一種技術(shù)柠傍,我們常常使用它在代碼中來做一些注釋,并且在適當(編譯代碼或運行代碼等時機)的時候辩稽,對其進行解釋惧笛,并且做一些額外的操作
下面我用idea自帶的diagram工具打開它們之間的聯(lián)系。
我們先來看看這兩個枚舉類:
- ElementType: 這個枚舉類型的常量定義了注解適用的目標,結(jié)合
Target
注解使用
1.TYPE Class類逞泄,接口(包括注解類型或者enum類型)
2.FIELD 屬性(包括enum實例)
3.METHOD 方法
4.PARAMETER 方法參數(shù)
5.CONSTRUCTOR 類構(gòu)造器
6.LOCAL_VARIABLE 本地變量
7.ANNOTATION_TYPE 注解類型
8.PACKAGE 包
- RetentionPolicy: 定義注解保存級別患整。 這個枚舉類型的常量描述保留注釋的各種政策。 他們結(jié)合使用
Retention
元注解類型進行指定注解要保留多長時間炭懊。
1.SOURCE 源代碼注解并级,被編譯器丟棄
2.CLASS 類注解拂檩,被編譯器記錄在class文件中侮腹,運行時被VM丟棄,在編譯時使用稻励,屬于默認配置
3.RUNTIME 被編譯器記錄在class文件中父阻,運行時可用,被VM保留望抽,所以可以在運行時搭配反射使用
注解異常處理
下面三個類是注解的異常處理類加矛,注解類型不匹配異常,格式化異常
元注解
- Annotation:定義了注解的常用方法
- Documented:標志將此注解包含至javadoc中
- Inherited: 注解允許繼承
- Repeatable: 可以重復(fù)的注解 jdk 1.8新增
- Retention: 定義注解保存級別
- Target: 定義注解適用的目標
- Native:表示一個定義常量值的字段可以從本機代碼被引用煤篙。