在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

JAVA中注解是怎么做到的(上)

jf_78858299 ? 來源:JAVA旭陽 ? 作者:JAVA旭陽 ? 2023-05-11 10:57 ? 次閱讀

概述

注解想必大家在項目中經常使用,比如Spring框架中常用的一些注解:@Controller@Service、@RequestMapping等等,它是JDK1.5及以后版本引入的一個特性。它可以聲明在包、類、字段、方法、局部變量、方法參數等的前面,用來對這些元素進行說明,注釋。那么你知道JDK什么是元注解嗎?注解有哪些分類嗎?以及注解在Java中最本質究竟是什么東西,是如何實現的呢?

注解的分類

根據注解的使用場景,主要分為三類,元注解、內置注解和自定義注解。

元注解

用于定義注解的注解,通常用于注解的定義上,標明該注解的使用范圍、生效范圍等。簡而言之,元注解是用來修飾注解的。

@Retention

指定注解信息保留到哪個階段,分別為源代碼階段、編譯Class階段、運行階段。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    /**
     * Returns the retention policy.
     * @return the retention policy
     */
    RetentionPolicy value();
}
  • SOURCE: 保留在源代碼java中,被編譯器丟棄,也就是說在class文件中不包含注解信息,通常用來標記源碼,引起大家的注意,比如自定義一個注解例如@ThreadSafe,用來標識一個類時線程安全的。
  • CLASS: 編譯后的class文件中包含注解信息,但是會被jvm丟棄
  • RUNTIME: 注解信息在運行期(JVM)保留(.class也有),可以通過反射機制讀取注解的信息

@Target

指定注解的使用范圍,如類、方法、屬性、局部屬性、參數等, 可以多選。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    /**
     * Returns an array of the kinds of elements an annotation type
     * can be applied to.
     * @return an array of the kinds of elements an annotation type
     * can be applied to
     */
    ElementType[] value();
}

具體可選的枚舉如下:

public enum ElementType {
    /** 適用范圍:類、接口、注解類型,枚舉類型enum */
    TYPE,
    /** 作用于類屬性 (includes enum constants) */
    FIELD,
    /** 作用于方法 */
    METHOD,
    /** 作用于參數聲明 */
    PARAMETER,
    /** 作用于構造函數聲明 */
    CONSTRUCTOR,
    /** 作用于局部變量聲明 */
    LOCAL_VARIABLE,
    /** 作用于注解聲明 */
    ANNOTATION_TYPE,
    /** 作用于包聲明 */
    PACKAGE,
    /** 作用于類型參數(泛型參數)聲明 */
    TYPE_PARAMETER,
    /** 作用于使用類型的任意語句(不包括class) */
    TYPE_USE
}

@Inherited

加上該注解的注解,表示可以被標注的類子類繼承,比如A上標記了帶有@Inherited的注解,那么類B繼承了A, 那么B也會有這個注解,默認情況下注解是不支持繼承的。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Inherited {
}

@Document

將此注解包含在 javadoc 中 ,它代表著此注解會被javadoc工具提取成文檔。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}

@Repeatable

1.8中加入的元注解,用來標記是否可以重復標記。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Repeatable {
    /**
     * Indicates the containing annotation type for the
     * repeatable annotation type.
     * @return the containing annotation type
     */
    Class? extends Annotation value();
}

內置注解

java提供了一些內置注解,可以配合編譯器來檢查代碼的正確性, 我們可以關注他們的元注解。

@Override

標記當前方法是覆寫父類的方法。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

@Deprecated

標記一個元素為已過期,不要在使用了

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}

@SuppressWarnings

用來關閉編譯器輸出的警告信息

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
    String[] value();
}

@FunctionalInterface

java8中引入,標記是一個函數式接口,也就是說有且只有一個抽象方法的接口

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}

自定義注解

注解遵循的格式一般如下:

//元注解部分 xxxx
@Retention(xxxx)
@Target(xxxx)
public @interface 注解名 {
  返回值 屬性名() 默認值;
  返回值 屬性名() 默認值;
}
  • 返回值支持的類型如下:java的8種基礎類型(不支持包裝類型)、String、Class、Enum、Annotation、以及上面類型的數組。
  • 默認值可選,非必有。

舉個項目中自定義的栗子:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented  
@Inherited
public @interface DataAuthorize {
    /**
     * 資產ID
     * @return
     */
    String assetId();

    /**
     * 資產類型
     * @return
     */
    String assetType();

    /**
     * 權限代碼
     * @return
     */
    String authCode() default "";

    /**
     * 使用的類型
     * @return
     */
    Class[] useType();
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2973

    瀏覽量

    104901
  • JDK
    JDK
    +關注

    關注

    0

    文章

    81

    瀏覽量

    16604
  • spring框架
    +關注

    關注

    0

    文章

    7

    瀏覽量

    2053
收藏 人收藏

    評論

    相關推薦

    示波器頻譜分析功能做到極致,怎么做到的?

    一、示波器的FFT 是什么? 二、示波器的FFT 能解決什么問題? 三、示波器的FFT 經常變成用戶手里的雞肋,問題在哪? 四、我們把示波器的頻譜分析功能做到極致,怎么做到的? 五
    的頭像 發表于 06-12 09:19 ?1.2w次閱讀
    示波器<b class='flag-5'>上</b>頻譜分析功能<b class='flag-5'>做到</b>極致,<b class='flag-5'>怎么做到</b>的?

    Java中注解的作用

    Annotation 注解(Annotation),也叫元數據。一種代碼級別的說明。它是JDK1.5及以后版本引入的一個特性,與類、接口、枚舉是在同一個層次。它可以聲明在包、類、字段、方法、局部變量
    的頭像 發表于 09-30 10:12 ?1028次閱讀
    <b class='flag-5'>Java</b><b class='flag-5'>中注解</b>的作用

    如何通過注解來優化我們的Java代碼

    注解? Java注解是一種元數據形式,可以被添加到Java代碼中的各種元素(類、方法、字段等),以提供關于這些元素的額外信息。
    的頭像 發表于 09-30 11:39 ?664次閱讀

    PCB刻制線圈怎么做到

    `如附圖這種PCB刻制線圈是怎么做的,畫得這么圓是怎么做到的?`
    發表于 06-13 11:07

    詳細介紹了Java泛型、注解、并發編程

    介紹了Java泛型、注解、并發編程、數據傳輸與序列化、高效IO、容器集合、反射與類加載以及JVM重點知識線程、內存模型、JVM運行時內存、垃圾回收與算法、Java中四種引用類型、GC 分代收集算法
    發表于 08-20 06:09

    HarmonyOS注解的使用方法分享

    定義我們的注解自定義注解1、聲明注解功能:檢測類中是否有規范的get方法新建java libray的module,命名為annotation,創建
    發表于 03-28 14:04

    分析java注解基本概念

    什么是注解(Annotation): Annotation(注解)就是Java提供了一種元程序中的元素關聯任何信息和著任何元數據(metadata)的途徑和方法。Annotion(注解
    發表于 09-27 14:53 ?0次下載

    怎么做到快速修補板式喂料機軸頭磨損

    怎么做到快速修補板式喂料機軸頭磨損
    發表于 01-23 11:10 ?2次下載

    Spring Boot常用注解與使用方式

    企業開發項目SpringBoot已經是必備框架了,其中注解是開發中的小工具(誰處可見哦),用好了開發效率大大提升,當然用錯了也會引入缺陷。
    的頭像 發表于 07-08 10:57 ?1396次閱讀

    注解定義Bean及開發

    注解本質是一個繼承了Annotation 的特殊接口,其具體實現類是Java 運行時生成的動態代理類。
    發表于 08-02 10:26 ?452次閱讀

    JAVA中注解怎么做到的(下)

    。它可以聲明在包、類、字段、方法、局部變量、方法參數等的前面,用來對這些元素進行說明,注釋。那么你知道JDK什么是元注解嗎?注解有哪些分類嗎?以及注解Java中最本質究竟是什么東西,
    的頭像 發表于 05-11 10:57 ?590次閱讀
    <b class='flag-5'>JAVA</b><b class='flag-5'>中注解</b>是<b class='flag-5'>怎么做到</b>的(下)

    怎么做到EMC設計與產品設計同步?(

    怎么做到EMC設計與產品設計同步?|深圳比創達EMC(
    的頭像 發表于 08-28 14:56 ?522次閱讀
    <b class='flag-5'>怎么做到</b>EMC設計與產品設計同步?(<b class='flag-5'>上</b>)

    怎么做到EMC設計與產品設計同步?(中)

    怎么做到EMC設計與產品設計同步?(中)相信不少人是有疑問的,今天深圳市比創達電子科技有限公司就跟大家解答一下!
    的頭像 發表于 08-29 10:34 ?473次閱讀

    怎么做到EMC設計與產品設計同步?(下)

    怎么做到EMC設計與產品設計同步?|深圳比創達EMC(下)
    的頭像 發表于 08-30 10:44 ?478次閱讀

    springmvc常用5種注解

    SpringMVC是一種基于Java的Web框架,使用注解可以更加方便靈活地開發和管理控制器,實現請求的映射和處理。在SpringMVC中,有許多常用的注解,本文將詳細介紹其中的五種注解
    的頭像 發表于 11-22 16:51 ?933次閱讀
    主站蜘蛛池模板: 中文字幕天堂在线| 九九久久久久午夜精选| 男女性高爱麻豆| 狠狠干视频网| 国产国拍亚洲精品mv在线观看| 国产福利在线观看一区二区| 亚洲1314| 日本网络视频www色高清免费| 色香淫欲| 免费日本网站| 国产一级一片免费播放视频| 成 年 人 视频在线播放| 午夜视频在线免费播放| 欧美黑人5o厘米全进去| 欧美性另类| 看黄网站免费| 特黄大片aaaaa毛片| 免费看a| 爱爱毛片| 日日操夜夜| 俺要操| 日本aaaaa高清免费看| 亚洲国产精品久久婷婷| 欧美一级乱理片免费观看| 国产乱辈通伦影片在线播放亚洲| 亚洲国产成人久久午夜| 免费看黄资源大全高清| 91人成网站色www免费| 一二三四日本视频社区| 日本a级影院| 超大乳抖乳露双乳视频| 免费在线黄色网址| 亚洲a网站| 深爱五月综合网| 国产视频每日更新| 美女午夜影院| 污污的网站免费阅读| 色视频免费看| 婷婷sese| 美女视频大全美女视频黄| 久久99色|