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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

jf_78858299 ? 來(lái)源:JAVA旭陽(yáng) ? 作者:JAVA旭陽(yáng) ? 2023-05-11 10:57 ? 次閱讀

概述

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

注解的分類(lèi)

根據(jù)注解的使用場(chǎng)景,主要分為三類(lèi),元注解、內(nèi)置注解和自定義注解。

元注解

用于定義注解的注解,通常用于注解的定義上,標(biāo)明該注解的使用范圍、生效范圍等。簡(jiǎn)而言之,元注解是用來(lái)修飾注解的。

@Retention

指定注解信息保留到哪個(gè)階段,分別為源代碼階段、編譯Class階段、運(yùn)行階段。

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

@Target

指定注解的使用范圍,如類(lèi)、方法、屬性、局部屬性、參數(shù)等, 可以多選。

@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 {
    /** 適用范圍:類(lèi)、接口、注解類(lèi)型,枚舉類(lèi)型enum */
    TYPE,
    /** 作用于類(lèi)屬性 (includes enum constants) */
    FIELD,
    /** 作用于方法 */
    METHOD,
    /** 作用于參數(shù)聲明 */
    PARAMETER,
    /** 作用于構(gòu)造函數(shù)聲明 */
    CONSTRUCTOR,
    /** 作用于局部變量聲明 */
    LOCAL_VARIABLE,
    /** 作用于注解聲明 */
    ANNOTATION_TYPE,
    /** 作用于包聲明 */
    PACKAGE,
    /** 作用于類(lèi)型參數(shù)(泛型參數(shù))聲明 */
    TYPE_PARAMETER,
    /** 作用于使用類(lèi)型的任意語(yǔ)句(不包括class) */
    TYPE_USE
}

@Inherited

加上該注解的注解,表示可以被標(biāo)注的類(lèi)子類(lèi)繼承,比如A上標(biāo)記了帶有@Inherited的注解,那么類(lèi)B繼承了A, 那么B也會(huì)有這個(gè)注解,默認(rèn)情況下注解是不支持繼承的。

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

@Document

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

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

@Repeatable

1.8中加入的元注解,用來(lái)標(biāo)記是否可以重復(fù)標(biāo)記。

@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();
}

內(nèi)置注解

java提供了一些內(nèi)置注解,可以配合編譯器來(lái)檢查代碼的正確性, 我們可以關(guān)注他們的元注解。

@Override

標(biāo)記當(dāng)前方法是覆寫(xiě)父類(lèi)的方法。

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

@Deprecated

標(biāo)記一個(gè)元素為已過(guò)期,不要在使用了

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

@SuppressWarnings

用來(lái)關(guān)閉編譯器輸出的警告信息

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

@FunctionalInterface

java8中引入,標(biāo)記是一個(gè)函數(shù)式接口,也就是說(shuō)有且只有一個(gè)抽象方法的接口

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

自定義注解

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

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

舉個(gè)項(xiàng)目中自定義的栗子:

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

    /**
     * 資產(chǎn)類(lèi)型
     * @return
     */
    String assetType();

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

    /**
     * 使用的類(lèi)型
     * @return
     */
    Class[] useType();
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2983

    瀏覽量

    106522
  • JDK
    JDK
    +關(guān)注

    關(guān)注

    0

    文章

    82

    瀏覽量

    16777
  • spring框架
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    2083
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    Java中注解的作用

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

    如何通過(guò)注解來(lái)優(yōu)化我們的Java代碼

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

    PCB刻制線(xiàn)圈怎么做到

    `如附圖這種PCB刻制線(xiàn)圈是怎么做的,畫(huà)得這么圓是怎么做到的?`
    發(fā)表于 06-13 11:07

    詳細(xì)介紹了Java泛型、注解、并發(fā)編程

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

    HarmonyOS注解的使用方法分享

    定義我們的注解自定義注解1、聲明注解功能:檢測(cè)類(lèi)中是否有規(guī)范的get方法新建java libray的module,命名為annotation,創(chuàng)建
    發(fā)表于 03-28 14:04

    分析java注解基本概念

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

    怎么做到快速修補(bǔ)板式喂料機(jī)軸頭磨損

    怎么做到快速修補(bǔ)板式喂料機(jī)軸頭磨損
    發(fā)表于 01-23 11:10 ?2次下載

    Spring Boot常用注解與使用方式

    企業(yè)開(kāi)發(fā)項(xiàng)目SpringBoot已經(jīng)是必備框架了,其中注解是開(kāi)發(fā)中的小工具(誰(shuí)處可見(jiàn)哦),用好了開(kāi)發(fā)效率大大提升,當(dāng)然用錯(cuò)了也會(huì)引入缺陷。
    的頭像 發(fā)表于 07-08 10:57 ?1568次閱讀

    注解定義Bean及開(kāi)發(fā)

    注解本質(zhì)是一個(gè)繼承了Annotation 的特殊接口,其具體實(shí)現(xiàn)類(lèi)是Java 運(yùn)行時(shí)生成的動(dòng)態(tài)代理類(lèi)。
    發(fā)表于 08-02 10:26 ?513次閱讀

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

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

    怎么做到EMC設(shè)計(jì)與產(chǎn)品設(shè)計(jì)同步?(

    怎么做到EMC設(shè)計(jì)與產(chǎn)品設(shè)計(jì)同步?|深圳比創(chuàng)達(dá)EMC(
    的頭像 發(fā)表于 08-28 14:56 ?645次閱讀
    <b class='flag-5'>怎么做到</b>EMC設(shè)計(jì)與產(chǎn)品設(shè)計(jì)同步?(<b class='flag-5'>上</b>)

    怎么做到EMC設(shè)計(jì)與產(chǎn)品設(shè)計(jì)同步?(中)

    怎么做到EMC設(shè)計(jì)與產(chǎn)品設(shè)計(jì)同步?(中)相信不少人是有疑問(wèn)的,今天深圳市比創(chuàng)達(dá)電子科技有限公司就跟大家解答一下!
    的頭像 發(fā)表于 08-29 10:34 ?583次閱讀

    怎么做到EMC設(shè)計(jì)與產(chǎn)品設(shè)計(jì)同步?(下)

    怎么做到EMC設(shè)計(jì)與產(chǎn)品設(shè)計(jì)同步?|深圳比創(chuàng)達(dá)EMC(下)
    的頭像 發(fā)表于 08-30 10:44 ?598次閱讀

    springmvc常用5種注解

    SpringMVC是一種基于Java的Web框架,使用注解可以更加方便靈活地開(kāi)發(fā)和管理控制器,實(shí)現(xiàn)請(qǐng)求的映射和處理。在SpringMVC中,有許多常用的注解,本文將詳細(xì)介紹其中的五種注解
    的頭像 發(fā)表于 11-22 16:51 ?1133次閱讀
    主站蜘蛛池模板: 亚洲综合激情六月婷婷在线观看 | 亚洲欧美视频在线播放 | 国产一级特黄a大片免费 | 亚洲天堂成人网 | 老色鬼久久综合第一 | 亚洲免费不卡 | 国产综合在线观看视频 | 亚洲区视频在线观看 | 永久国产| 欧美成人免费高清网站 | 亚洲欧美婷婷 | 亚洲午夜久久 | 欧美日本一区二区三区道 | 亚洲性后网 | 国模私拍福利一区二区 | 欧美精品四虎在线观看 | 福利片免费一区二区三区 | 久久成人国产精品免费 | 欧美福利片在线观看 | 97色吧| 男女交性无遮挡免费视频 | h视频在线观看免费网站 | 欧美刺激午夜性久久久久久久 | 三浦理惠子中文在 | 免费大片看黄在观看 | 欧美色亚洲图 | 亚洲国产成人在线 | 欧美成人xxxx | 狠狠去 | 天天干视频在线 | 亚洲免费二区三区 | 最近国语剧情视频在线观看 | 国产真实灌醉美女疯狂弄 | 网站啪啪 | 娇妻被黑人蹂躏 | 亚洲精品综合网在线8050影院 | 夜夜夜夜操 | 日本黄色大片网站 | 欧美性色xo影院永久禁欲 | 亚洲精品456人成在线 | 97人人在线视频 |