JAVA 注解詳解及簡單實例
JAVA 注解詳解及簡單實例
何為注解
注解(Annotation)又稱為元數(shù)據(jù),在JDK1.5后引入,它的作用是:
生成文檔 這是注解的原始用途,可以通過注解生成JavaDoc文檔
跟蹤代碼的依賴性 可以通過注解替代配置文件,簡化項目的配置?,F(xiàn)有的許多框架都采用這個功能減少自己的配置。
編譯檢查 在編譯時進行格式檢查,例如@Override
基礎(chǔ)注解
Java目前內(nèi)置了三種標(biāo)準(zhǔn)注解,以及四種元注解。四種元注解負(fù)責(zé)創(chuàng)建其他的注解。
三種標(biāo)準(zhǔn)注解
@Override,表示當(dāng)前的方法覆蓋超類中的方法
@Deprecated,如果程序員使用被這個注解注釋的元素,則編譯器會進行提示
@Suppress Warnings,忽略編譯器的警告
四種元注解
@Target,表示注解的適用范圍,例如@Target(ElementType.FIELD).
ElementType的枚舉值有
CONSTRUCTOR,用于構(gòu)造方法
FIELD,用于字段聲明,包括常量
LOCAL_VARIABLE,用于局部變量
METHOD,用于方法
PACKAGE,用于包聲明
PARAMETER,用于參數(shù)聲明
TYPE,用于類,接口
@Retention,表示注解的保留級別,例如@Retention(RetentionPolicy.RUNTIME).
RetentionPolicy的枚舉值有
Source,注解將被編譯器丟棄
Class,注解可以在class文件中使用,但是會被VM丟棄
Runtime,在VM的運行期間也會保留
@Document,將次注解在javaDoc文件中可見
@Inherited,允許子類繼承父類中的注解
自定義注解
創(chuàng)建注解
package com.rainman.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MethodLog {
String method() default "do something";
String opeator() default "someone";
}
@interface標(biāo)明該類型是一個注解的定義
對于“String method() default "dong something";”來說String是注解參數(shù)的數(shù)據(jù)類型,method是參數(shù)名,default用來設(shè)置默認(rèn)值
注解的使用
package com.rainman.controller;
import com.rainman.annotation.MethodLog;
public class CelebrateController {
@MethodLog(method="celebrate birthday",operator="we")
public void celebrateBirthday(){
}
@MethodLog(operator = "we")
public void celebrateNewYears(){
}
@MethodLog(method="celebrate harvest")
public void celebrateHarvest(){
}
@MethodLog
public void yeah(){
}
}
注解使用的格式為"@Annotation(para=xxxx,...)",Annotation是注解名,para是注解中設(shè)置的參數(shù)名,參數(shù)如果不設(shè)置值,則會使用默認(rèn)值
設(shè)置注解解析器
package com.rainman.annotation;
import com.rainman.controller.CelebrateController;
import java.lang.reflect.Method;
public class MethodLogParse {
public static void parse(Class classType) throws Exception{
Method[] array = classType.getMethods();
for(Method method : array){
System.out.println("=================="+method.getName()+"=================");
if(method.isAnnotationPresent(MethodLog.class)){
MethodLog methodLog = method.getDeclaredAnnotation(MethodLog.class);
String str = String.valueOf(methodLog.operator());
String str1 = String.valueOf(methodLog.method());
System.out.println(str + " " + str1);
}
}
}
public static void main(String[] args){
try {
MethodLogParse.parse(CelebrateController.class);
}catch(Exception e){
e.printStackTrace();
}
}
}
輸出結(jié)果為
==================celebrateBirthday================= we celebrate birthday ==================yeah================= someone do something ==================celebrateNewYears================= we do something ==================celebrateHarvest================= someone celebrate harvest ==================wait================= ==================wait================= ==================wait================= ==================equals================= ==================toString================= ==================hashCode================= ==================getClass================= ==================notify================= ==================notifyAll=================
通過反射機制,遍歷方法,然后獲取方法的注解。注解可以注解類,方法,字段等等,所以也可以通過類似的方式獲取這些對象的注解,然后進行處理。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
AsyncHttpClient的ConnectionSemaphore方法源碼流程解讀
這篇文章主要為大家介紹了AsyncHttpClient的ConnectionSemaphore方法源碼流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
java WSDL接口webService實現(xiàn)方式
這篇文章主要為大家詳細(xì)介紹了java WSDL接口webService實現(xiàn)方式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04
eclipse自動創(chuàng)建SpringBoot項目報錯的解決
這篇文章主要介紹了eclipse自動創(chuàng)建SpringBoot項目報錯的解決方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
Java PDF 添加數(shù)字簽名的實現(xiàn)方法
這篇文章主要介紹了Java PDF 添加數(shù)字簽名的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Java使用IntelliJ IDEA連接MySQL的詳細(xì)教程
這篇文章主要給大家介紹了關(guān)于Java使用IntelliJ IDEA連接MySQL的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
SpringBoot集成SpringSecurity和JWT做登陸鑒權(quán)的實現(xiàn)
這篇文章主要介紹了SpringBoot集成SpringSecurity和JWT做登陸鑒權(quán)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04

