Java中使用注解的實例詳解
注解(Annotation)是放在Java源碼的類、方法、字段、參數(shù)前的一種特殊“注釋”
注釋會被編譯器直接忽略,注解則可以被編譯器打包進(jìn)入class文件,因此,注解是一種用作標(biāo)注的“元數(shù)據(jù)”。
注解的作用
注解可以分為三類:
1、內(nèi)置注解(由編譯器使用的注解),如:
@Override:讓編譯器檢查該方法是否正確地實現(xiàn)了覆寫;@SuppressWarnings:告訴編譯器忽略此處代碼產(chǎn)生的警告。
這類注解不會被編譯進(jìn)入.class文件,它們在編譯后就被編譯器扔掉了。
2、由工具處理.class文件使用的注解,比如有些工具會在加載class的時候,對class做動態(tài)修改,實現(xiàn)一些特殊的功能。這類注解會被編譯進(jìn)入.class文件,但加載結(jié)束后并不會存在于內(nèi)存中。這類注解只被一些底層庫使用,一般我們不必自己處理。
3、在程序運行期能夠讀取的注解,它們在加載后一直存在于JVM中,這也是最常用的注解。例如,一個配置了@PostConstruct的方法會在調(diào)用構(gòu)造方法后自動被調(diào)用(這是Java代碼讀取該注解實現(xiàn)的功能,JVM并不會識別該注解)。
注解的定義
元注解
有一些注解可以修飾其他注解,這些注解就稱為元注解(meta annotation)。Java標(biāo)準(zhǔn)庫已經(jīng)定義了一些元注解,我們只需要使用元注解,通常不需要自己去編寫元注解。
@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 - 運行期:
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
定義子類是否可繼承父類定義的注解
@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 "";
}- 定義一個注解時,還可以定義配置參數(shù)。配置參數(shù)可以包括:基本類型、String、Class、枚舉類型。
- 可以使用 default 來聲明參數(shù)的默認(rèn)值
- 最常用的參數(shù)定義為
value(),推薦所有參數(shù)都盡量設(shè)置默認(rèn)值 - 必須設(shè)置
@Target和@Retention,@Retention一般設(shè)置為RUNTIME,便于運行期讀取該注解
到此這篇關(guān)于Java中如何使用注解的文章就介紹到這了,更多相關(guān)java注解使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot+VUE前后端分離實現(xiàn)疫情防疫平臺JAVA
本文主要使用了Java、springmvc、VUE、node.js、mybatis、mysql、tomcat、jquery、layui、bootstarp、JavaScript、html、css、jsp、log4j等一些常見的基本技術(shù),實現(xiàn)一個疫情防疫小平臺2021-08-08
Spring Data Jpa實現(xiàn)分頁和排序代碼實例
本篇文章主要介紹了Spring Data Jpa實現(xiàn)分頁和排序代碼實例,具有一定的參考價值,有興趣的可以了解一下。2017-03-03
springboot?加載本地jar到maven的實現(xiàn)方法
如何在SpringBoot項目中加載本地jar到Maven本地倉庫,使用Maven的install-file目標(biāo)來實現(xiàn),本文結(jié)合實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2025-01-01

