Java 注解 Annotation
概述
了解 Java 注解前必須先了解元注解。
元注解:描述注解的注解。
如果明白元數(shù)據(jù)概念就比較好理解元注解
元數(shù)據(jù):描述數(shù)據(jù)的數(shù)據(jù)。
還是比較抽象哈,下面舉個例子說明下。
比如一個txt文件的元數(shù)據(jù)有 : 文件大小、創(chuàng)建時間、最后修改時間等數(shù)據(jù)。
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:只能在方法參數(shù)上使用
ElementType.CONSTRUCTOR:只能在構(gòu)造方法上使用
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 源碼實現(xiàn)
通過源碼可以發(fā)現(xiàn),使用@Target來限制該注解只能使用在方法上面使用;@Retention來限制該注解只在編譯期間使用,編譯完成class后就不存在了。
@Override 只是在源碼語法級別驗證使用。
2. @Deprecated
用于標注屬性、方法、類等 已經(jīng)過時,不推薦使用,下一個版本可能會刪除掉。
3. @SuppressWarnings
代碼中在開發(fā)工具中,可能會出現(xiàn)警告提示,使用該注解可以抑制編譯器的注解。
總結(jié)
Java中的注解,看源碼什么也沒實現(xiàn),都只是定義而已。說白了就是給類、或方法、屬性等添加一個注釋。
但注解可以通過 Java 的反射機制獲取到。而這就是注解強大的地方。
比如 Spring 的 IOC ,在系統(tǒng)啟動的時候會掃描指定包下所有的類,獲取該類中所有標注屬性上的注解,并根據(jù)注解獲取需要注入的對象,并通過發(fā)射注入過去。
IOC 實現(xiàn)機制 可參考我上一篇文章 【從零手寫IOC】
想了解更多精彩內(nèi)容請關(guān)注我的公眾號
本人簡書blog地址:http://www.jianshu.com/u/1f0067e24ff8????
點擊這里快速進入簡書
GIT地址:http://git.oschina.net/brucekankan/
點擊這里快速進入GIT
總結(jié)
以上是生活随笔為你收集整理的Java 注解 Annotation的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DatabaseMetaData.get
- 下一篇: java美元兑换,(Java实现) 美元