Java中使用注解的實(shí)例詳解
注解(Annotation)是放在Java源碼的類(lèi)、方法、字段、參數(shù)前的一種特殊“注釋”
注釋會(huì)被編譯器直接忽略,注解則可以被編譯器打包進(jìn)入class文件,因此,注解是一種用作標(biāo)注的“元數(shù)據(jù)”。
注解的作用
注解可以分為三類(lèi):
1、內(nèi)置注解(由編譯器使用的注解),如:
@Override
:讓編譯器檢查該方法是否正確地實(shí)現(xiàn)了覆寫(xiě);@SuppressWarnings
:告訴編譯器忽略此處代碼產(chǎn)生的警告。
這類(lèi)注解不會(huì)被編譯進(jìn)入.class
文件,它們?cè)诰幾g后就被編譯器扔掉了。
2、由工具處理.class
文件使用的注解,比如有些工具會(huì)在加載class的時(shí)候,對(duì)class做動(dòng)態(tài)修改,實(shí)現(xiàn)一些特殊的功能。這類(lèi)注解會(huì)被編譯進(jìn)入.class
文件,但加載結(jié)束后并不會(huì)存在于內(nèi)存中。這類(lèi)注解只被一些底層庫(kù)使用,一般我們不必自己處理。
3、在程序運(yùn)行期能夠讀取的注解,它們?cè)诩虞d后一直存在于JVM中,這也是最常用的注解。例如,一個(gè)配置了@PostConstruct
的方法會(huì)在調(diào)用構(gòu)造方法后自動(dòng)被調(diào)用(這是Java代碼讀取該注解實(shí)現(xiàn)的功能,JVM并不會(huì)識(shí)別該注解)。
注解的定義
元注解
有一些注解可以修飾其他注解,這些注解就稱(chēng)為元注解(meta annotation)。Java標(biāo)準(zhǔn)庫(kù)已經(jīng)定義了一些元注解,我們只需要使用元注解,通常不需要自己去編寫(xiě)元注解。
@Target
定義注解能夠被應(yīng)用于源碼的哪些位置
// 定義注解 @Report 可用在方法上 @Target(ElementType.METHOD) public @interface MyAnnotation1 { int type() default 0; String level() default "info"; String value() default ""; } // 定義注解 @Report 可用在方法或字段上 @Target({ ElementType.METHOD, ElementType.FIELD }) public @interface MyAnnotation2 { ... }
@Retention
定義注解的生命周期,默認(rèn)為 CLASS
,使用最多一般是 RUNTIME
- 僅編譯期:
RetentionPolicy.SOURCE
- 僅class文件:
RetentionPolicy.CLASS
- 運(yùn)行期:
RetentionPolicy.RUNTIME
@Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { int type() default 0; String level() default "info"; String value() default ""; }
@Repeatable
定義注解是否可重復(fù)
@Repeatable(Reports.class) @Target(ElementType.TYPE) public @interface MyAnnotation { int type() default 0; String level() default "info"; String value() default ""; }
@Inherited
定義子類(lèi)是否可繼承父類(lèi)定義的注解
@Inherited @Target(ElementType.TYPE) public @interface MyAnnotation { int type() default 0; String level() default "info"; String value() default ""; }
定義注解
public @interface xxx {...}
- 用
@interface
定義注解 - 添加參數(shù)、默認(rèn)值
- 用元注解配置注解
// 用元注解配置注解 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) // 用 @interface 定義注解 public @interface MyAnnotation { // 注解的參數(shù) int type() default 0; String level() default "info"; String value() default ""; }
- 定義一個(gè)注解時(shí),還可以定義配置參數(shù)。配置參數(shù)可以包括:基本類(lèi)型、String、Class、枚舉類(lèi)型。
- 可以使用 default 來(lái)聲明參數(shù)的默認(rèn)值
- 最常用的參數(shù)定義為
value()
,推薦所有參數(shù)都盡量設(shè)置默認(rèn)值 - 必須設(shè)置
@Target
和@Retention
,@Retention
一般設(shè)置為RUNTIME
,便于運(yùn)行期讀取該注解
到此這篇關(guān)于Java中如何使用注解的文章就介紹到這了,更多相關(guān)java注解使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java簡(jiǎn)單實(shí)現(xiàn)八叉樹(shù)圖像處理代碼示例
這篇文章主要介紹了java簡(jiǎn)單實(shí)現(xiàn)八叉樹(shù)圖像處理代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12springboot+VUE前后端分離實(shí)現(xiàn)疫情防疫平臺(tái)JAVA
本文主要使用了Java、springmvc、VUE、node.js、mybatis、mysql、tomcat、jquery、layui、bootstarp、JavaScript、html、css、jsp、log4j等一些常見(jiàn)的基本技術(shù),實(shí)現(xiàn)一個(gè)疫情防疫小平臺(tái)2021-08-08Spring Data Jpa實(shí)現(xiàn)分頁(yè)和排序代碼實(shí)例
本篇文章主要介紹了Spring Data Jpa實(shí)現(xiàn)分頁(yè)和排序代碼實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-03-03spring boot整合shiro安全框架過(guò)程解析
這篇文章主要介紹了spring boot整合shiro安全框架過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11springboot?加載本地jar到maven的實(shí)現(xiàn)方法
如何在SpringBoot項(xiàng)目中加載本地jar到Maven本地倉(cāng)庫(kù),使用Maven的install-file目標(biāo)來(lái)實(shí)現(xiàn),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2025-01-01Java向List集合中批量添加元素的實(shí)現(xiàn)方法
這篇文章主要介紹了Java向List集合中批量添加元素的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05