国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java實現(xiàn)自定義注解

這篇具有很好參考價值的文章主要介紹了Java實現(xiàn)自定義注解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

(1)Java實現(xiàn)自定義注解其實很簡單,跟類定義差不多,只是屬性的定義可能跟我們平時定義的屬性略有不同,這里會給大家詳解,先來看代碼:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {
    String message() default "";
    int[] nums();
}

上面代碼就實現(xiàn)了一個自定義注解,實現(xiàn)自定義注解需要最少指定兩個基本條件①注解的作用范圍②注解的生命周期,那這兩個范圍怎么指定呢?這個問題問的很好,指定這兩個條件,就需要使用到了Java為我們提供的元注解(所謂的元注解:其實就是Java官網(wǎng)自己定義的注解,作用在注解上,并且為這個注解賦予了含義,當(dāng)編譯器掃描到這個注解時,就知道該注解是什么作用?。?/p>


(2)看到這里要注意的是,上面 message() 和 nums()? 可能跟我們定義方法有點類似,但是,它不是方法!它不是方法!它不是方法!重要的事情講三遍,它是java注解自定義屬性的規(guī)則!(可能很多人疑惑也就是在這個點上?。?/strong>

? ? String message() default "";

上面表示的是定義一個 String 類型的 message屬性,默認(rèn)值為 ""

注解自定義屬性的格式為: 屬性類型 屬性名稱();

其中默認(rèn)值可以寫可以不寫,如果需要給這個屬性默認(rèn)值,那么就使用 default 值 來為這個屬性賦予默認(rèn)值。這樣就已經(jīng)完成了自定義注解。


(3)剛才我們說過,需要自定義注解,最少指定兩個基本條件:①注解的作用范圍②注解的生命周期,那么就需要用到元注解,Java為我們提供了四個元注解,作用如下:

注解 作用
@Target 指定注解作用范圍(比如說:該注解是作用在類上,還是方法,或者是屬性上等等)
@Retention 指定注解的生命周期(也就是注解的保留時間,是在編譯器有效,還是運行時有效等等)
@Documented 是一個標(biāo)記注解,里面沒有任何屬性,用 @Documented 注解修飾的注解類會被 JavaDoc 工具提取成文檔。(不常用,可選項)
@Inherited 也是一個標(biāo)記注解,,沒有定義屬性,作用是為了表示該注解可以被繼承(比如說:你自定義了一個A注解,并且使用了@Inherited修飾,然后在paren類使用了A注解,那么paren的所有子類都默認(rèn)繼承了注解A)?!静怀S谩?/td>


4)帶大家看一下源碼,看一下這幾個元注解分別定義了哪些屬性,并且有什么值:

?①Target注解

Java實現(xiàn)自定義注解

可以看到,Target注解只是定義了一個Value屬性,屬性類型為 ElementType,來看一下ElementType有哪些值

public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration */
    TYPE,    //作用于類、接口、枚舉

    /** Field declaration (includes enum constants) */
    FIELD,    //作用在字段上

    /** Method declaration */
    METHOD,    //作用在方法

    /** Formal parameter declaration */
    PARAMETER,  //形參

    /** Constructor declaration */
    CONSTRUCTOR,  //構(gòu)造器

    /** Local variable declaration */
    LOCAL_VARIABLE,  //局部變量

    /** Annotation type declaration */
    ANNOTATION_TYPE, //注解類型聲明

    /** Package declaration */
    PACKAGE, //包聲明

    /**
     * Type parameter declaration
     *
     * @since 1.8
     */
    TYPE_PARAMETER,  //類型參數(shù)化的聲明

    /**
     * Use of a type
     *
     * @since 1.8
     */
    TYPE_USE,  //把該注解當(dāng)做一個類型來使用

    /**
     * Module declaration.
     *
     * @since 9
     */
    MODULE
}

?@Retention

Java實現(xiàn)自定義注解

?Retention也是只定義了一個value屬性,該屬性類型為: RetentionPolicy,我們再一起看看Retention有哪些值可以選擇:

public enum RetentionPolicy {
    /**
     * Annotations are to be discarded by the compiler.
     */
    SOURCE,  //表示該注解的生命周期只在編譯階段

    /**
     * Annotations are to be recorded in the class file by the compiler
     * but need not be retained by the VM at run time.  This is the default
     * behavior.
     */
    CLASS, //該注解被保留在class文件上
 
    /**
     * Annotations are to be recorded in the class file by the compiler and
     * retained by the VM at run time, so they may be read reflectively.
     *
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME //該注解生命周期在運行時
}

@Documented

Java實現(xiàn)自定義注解

可以看到,Documented注解只是一個標(biāo)記注解,里面什么屬性都沒有聲明,作用是:使用了該注解的類,會被 doc工具提取成參考文檔

@Inherited

Java實現(xiàn)自定義注解

?這個注解也是一個標(biāo)記注解,表示該注解是可以被繼承的

總結(jié)

以上就是Java注解自定義的全部過程了,注解出現(xiàn)為開發(fā)人員提供了很大的便利,從以前spring工程需要繁瑣復(fù)雜的xml各種配置,到現(xiàn)在只需要在類上添加注解,其中的對比一用可知,這里的注解也可以充當(dāng)理解為就是一個標(biāo)識符,比如說在類上使用 @Component,那么springBoot容器啟動的時候就可以知道該類需要加載到容器中。文章來源地址http://www.zghlxwxcb.cn/news/detail-418543.html

到了這里,關(guān)于Java實現(xiàn)自定義注解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Java基礎(chǔ)】注解——自定義注解

    【Java基礎(chǔ)】注解——自定義注解

    Java 注解(Annotation)又稱 Java 標(biāo)注,是 JDK5.0 引入的一種注釋機制。 比如我們常見的@Override和@Deprecated都是注解,注解可以加在類、方法、成員變量等上面,類似于給他們“ 打標(biāo)簽 \\\"。 public @interface 注解名{} 看起來和定義接口很相似只是多了一個@符號 接口: public interface 接口名

    2024年02月03日
    瀏覽(19)
  • Java中的注解,自定義注解

    Java中的注解,自定義注解

    框架 = 注解 + 反射 + 設(shè)計模式 注解( Annotation )是從JDK5.0開始引入,以“@注解名”在代碼中存在。 Annotation 可以像修飾符一樣被使用,可用于修飾包、類、構(gòu)造器、方法、成員變量、參數(shù)、局部變量的聲明。還可以添加一些參數(shù)值,這些信息被保存在 Annotation 的 “name=valu

    2023年04月16日
    瀏覽(24)
  • java 元注解||自定義注解的使用

    1. @Retention注解 指定了標(biāo)記的注解如何存儲: RetentionPolicy.SOURCE,標(biāo)記的注解僅保留在源代碼級別,并被編譯器忽略。 RetentionPolicy.CLASS,標(biāo)記的注解在編譯時由編譯器保留,但被Java虛擬機(JVM)忽略。 RetentionPolicy.RUNTIME,標(biāo)記的注解由JVM保留,以便運行時環(huán)境可以使用。 2. @Do

    2024年02月16日
    瀏覽(24)
  • Java中自定義注解

    當(dāng)使用Java編寫應(yīng)用程序時,我們常常使用注解來為程序添加附加信息,并且可以在運行時讀取這些注解。除了Java提供的預(yù)定義注解外,我們還可以自定義注解來滿足自己的需求。在本文中,我們將介紹Java中自定義注解的基礎(chǔ)知識。 一、什么是注解? 注解是一種元數(shù)據(jù),可

    2024年02月14日
    瀏覽(24)
  • Java的自定義注解

    Java的自定義注解

    ????????自定義注解包括注解聲明、元注解、運行時處理器三個部分。注解聲明指定了注解的名稱、作用域、成員等信息;元注解則用來對注解進(jìn)行修飾;運行時處理器則負(fù)責(zé)在程序運行過程中處理注解,并根據(jù)注解提供的信息執(zhí)行相應(yīng)的邏輯。自定義注解在編寫框架、插

    2024年02月03日
    瀏覽(23)
  • Java自定義注解

    Java自定義注解

    目錄 一、什么是自定義注解 1)Java注解簡介 2)Java注解分類 JDK基本注解 JDK元注解 自定義注解 如何自定義注解? 二、自定義注解 1)獲取類上注解值 2)獲取類屬性上的注解屬性值 3)獲取方法上的注解值? 4)獲取參數(shù)修飾注解對應(yīng)的屬性值 三、aop應(yīng)用自定義注解 自定義注

    2024年02月19日
    瀏覽(20)
  • 一文詳解Java自定義注解

    一文詳解Java自定義注解

    目錄 簡介 JDK注解 @Target @Retention @Documented @Inherited 第三方注解 自定義注解 舉例 默認(rèn)字符串注解 實現(xiàn)指定包名稱掃描注解 注解( Annotation )是Java SE 5.0 版本開始引入的概念,它是對 Java 源代碼的說明,是一種元數(shù)據(jù)(描述數(shù)據(jù)的數(shù)據(jù))。 Java中的注解主要分為以下三類: JDK的

    2024年02月06日
    瀏覽(59)
  • 自定義注解與攔截器實現(xiàn)不規(guī)范sql攔截(自定義注解填充插件篇)

    自定義注解與攔截器實現(xiàn)不規(guī)范sql攔截(自定義注解填充插件篇)

    在自定義注解與攔截器實現(xiàn)不規(guī)范sql攔截(攔截器實現(xiàn)篇)中提到過,寫了一個idea插件來輔助對Mapper接口中的方法添加自定義注解,這邊記錄一下插件的實現(xiàn)。 在上一篇中,定義了一個自定義注解對需要經(jīng)過where判斷的Mapper sql方法進(jìn)行修飾。那么,現(xiàn)在想使用一個idea插件來

    2024年01月23日
    瀏覽(24)
  • SpringBoot自定義Jackson注解,實現(xiàn)自定義序列化BigDecimal(增強JsonFormat注解)

    在處理BigDecimal字段的時候,希望自定義序列化格式。雖然有 JsonFormat可以自定義格式,但是還是不夠,JsonFormat不能對 BigDecimal 進(jìn)行個性化處理,比如指定的RoundingMode。 現(xiàn)在就是需要有個注解,可以實現(xiàn)自定序列化BigDecimal類型 首先,自定義一個注解 BigDecimalFormatter 實現(xiàn)一個

    2024年02月09日
    瀏覽(28)
  • 根據(jù)aop實現(xiàn)自定義緩存注解

    根據(jù)aop實現(xiàn)自定義緩存注解

    自定義注解 切面 使用

    2024年02月13日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包