Java 注解 Annotation
概述
了解 Java 注解前必須先了解元注解。 
 元注解:描述注解的注解。
如果明白元數據概念就比較好理解元注解 
 元數據:描述數據的數據。 
 還是比較抽象哈,下面舉個例子說明下。
比如一個txt文件的元數據有 : 文件大小、創建時間、最后修改時間等數據。
JDK提供了4種元注解
- @Retention 聲明注解的生命周期
 - @Target 修飾注解可以使用到那些目標對象上
 - @Document 提取javadoc 文檔
 - @Inherited 繼承性,使用它,子類也集成該類的注解
 
1.@Retention
@Retention Annotation聲明注解的生命周期,生命周期包括3中 SOURCE、CLASS、RUNTIME
定義 Retention
 
 RetentionPolicy中定義了注解的生命周期
RetentionPolicy.SOURCE:這種類型的Annotations只在源代碼級別保留,編譯時就會被忽略 
 RetentionPolicy.CLASS:這種類型的Annotations編譯時被保留,在class文件中存在,但JVM將會忽略 
 RetentionPolicy.RUNTIME:這種類型的Annotations將被JVM保留,所以他們能在運行時被JVM或其他使用反射機制的代碼所讀取和使用.
2. @Target
@Target Annotation表示的是這個Annotation可以應用在哪里,是對Annotation應用的限制,如果沒有這個標識的話,Annotation可以用在任何地方,比如類上,方法上,變量、屬性上等 
  
 ElementType 定義了該注解可以使用的位置
ElementType.TYPE:只能在類、接口、枚舉、注解 上使用 
 ElementType.FIELD:只能在字段、枚舉的常量上使用 
 ElementType.METHOD:只能在方法上使用 
 ElementType.PARAMETER:只能在方法參數上使用 
 ElementType.CONSTRUCTOR:只能在構造方法上使用 
 ElementType.LOCAL_VARIABLE:只能在局部變量上使用 
 ElementType.ANNOTATION_TYPE:只能在注解上使用 
 ElementType.PACKAGE:只能在包上使用 
 ElementType.TYPE_PARAMETER:只能在在 Type 的聲明式前面
public <@TypeAnnotation T> void testTypeAnnotation(T t)
ElementType.TYPE_USE: 能標注任何類型名稱
3. @Document
Documented 注解表明這個注解應該被 javadoc工具記錄. 默認情況下,javadoc是不包括注解的. 但如果聲明注解時指定了 @Documented,則它會被 javadoc 之類的工具處理, 所以注解類型信息也會被包括在生成的文檔中。
4. @Inherited
說明子類可以繼承父類中的該注解
JDK提供了3種注解
上面的4個是元注解哈,這里的是注解,不要弄混了 
 * @Override :限定重寫父類方法,該注釋只能用于方法 
 * @Deprecated: 用于某個程序元素(類,方法)已過時 
 * @SuppressWarnings:抑制編譯器警告 
1. @Override
@Override 源碼實現 
  
 通過源碼可以發現,使用@Target來限制該注解只能使用在方法上面使用;@Retention來限制該注解只在編譯期間使用,編譯完成class后就不存在了。 
 @Override 只是在源碼語法級別驗證使用。
2. @Deprecated
 
 用于標注屬性、方法、類等 已經過時,不推薦使用,下一個版本可能會刪除掉。
3. @SuppressWarnings
 
 代碼中在開發工具中,可能會出現警告提示,使用該注解可以抑制編譯器的注解。
總結
Java中的注解,看源碼什么也沒實現,都只是定義而已。說白了就是給類、或方法、屬性等添加一個注釋。 
 但注解可以通過 Java 的反射機制獲取到。而這就是注解強大的地方。 
 比如 Spring 的 IOC ,在系統啟動的時候會掃描指定包下所有的類,獲取該類中所有標注屬性上的注解,并根據注解獲取需要注入的對象,并通過發射注入過去。 
 IOC 實現機制 可參考我上一篇文章 【從零手寫IOC】
想了解更多精彩內容請關注我的公眾號 
 
本人簡書blog地址:http://www.jianshu.com/u/1f0067e24ff8???? 
 點擊這里快速進入簡書
GIT地址:http://git.oschina.net/brucekankan/ 
 點擊這里快速進入GIT
總結
以上是生活随笔為你收集整理的Java 注解 Annotation的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: DatabaseMetaData.get
 - 下一篇: java.lang.Void 解析与使用