日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 注解 Annotation

發(fā)布時間:2024/9/30 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 注解 Annotation 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概述

了解 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中定義了注解的生命周期

public enum RetentionPolicy {SOURCE,CLASS,RUNTIME }

RetentionPolicy.SOURCE:這種類型的Annotations只在源代碼級別保留,編譯時就會被忽略
RetentionPolicy.CLASS:這種類型的Annotations編譯時被保留,在class文件中存在,但JVM將會忽略
RetentionPolicy.RUNTIME:這種類型的Annotations將被JVM保留,所以他們能在運行時被JVM或其他使用反射機制的代碼所讀取和使用.

2. @Target

@Target Annotation表示的是這個Annotation可以應用在哪里,是對Annotation應用的限制,如果沒有這個標識的話,Annotation可以用在任何地方,比如類上,方法上,變量、屬性上等

ElementType 定義了該注解可以使用的位置

public enum ElementType {TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,ANNOTATION_TYPE,PACKAGE,TYPE_PARAMETER,TYPE_USE }

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。