最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解注解與自定義注解的一些概念

 更新時(shí)間:2021年06月08日 08:38:03   作者:神韻499  
今天給大家?guī)淼奈恼率亲⒔獾南嚓P(guān)知識(shí),本文圍繞著注解與自定義注解的一些概念展開,文中詳細(xì)介紹了這些知識(shí),需要的朋友可以參考下

一、注解介紹

注解就是一種標(biāo)記符號(hào),可以在代碼上的關(guān)鍵節(jié)點(diǎn)(類、方法、變量、參數(shù)、包)打上標(biāo)記,然后程序在編譯時(shí)或者運(yùn)行時(shí)就可以檢測(cè)到這些標(biāo)記從而執(zhí)行一些自己需要的功能操作。

自定義注解的步驟可以簡(jiǎn)化成三步

1、定義注解:用@Interface創(chuàng)建,并加上常用的元注解和自定義注解類型元素。

2、實(shí)現(xiàn)注解功能:編寫注解的功能,一般都是通過AOP在程序運(yùn)行時(shí)去捕獲這個(gè)標(biāo)記從而實(shí)現(xiàn)。(這步很關(guān)鍵,也是實(shí)現(xiàn)自定義注解的關(guān)鍵)

3、使用定義注解:將注解修飾/標(biāo)記到需要的程序代碼中。

通過我們最常見的一個(gè)注解來解釋這些注解概念:@Autowired,看下他的定義

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
    boolean required() default true;
}

 二、元注解

根據(jù)Autowired的定義可知道,最基本的三個(gè)元注解

@Target、@Retention、@Documented(還有一個(gè)是@Inherited也算一個(gè),但是這里Autowired沒用上,我也會(huì)介紹一下)

其中,@Target和@Retention是我們定義注解主要關(guān)注的部分,而@Documented與@Inherited是我們不很關(guān)注的元注解,我會(huì)簡(jiǎn)單提一下。

1、@Documented與@Inherited

@Documented注解,是被用來指定自定義注解是否能隨著被定義的java文件生成到JavaDoc文檔當(dāng)中。

@Inherited注解,是指定某個(gè)自定義注解如果寫在了父類的聲明部分,那么子類的聲明部分也能自動(dòng)擁有該注解。@Inherited注解只對(duì)那些@Target被定義為ElementType.TYPE的自定義注解起作用。

2、@Target

@Target注解是一個(gè)指定可以使用的范圍(類、方法、變量、參數(shù)、包)

比如上面的Autowired可以使用的范圍,CONSTRUCTOR、METHOD、PARAMETER、FIELD、ANNOTATION_TYPE對(duì)應(yīng)下面的ElementType這個(gè)枚舉類,已經(jīng)有注釋說明這里不再解釋。

public enum ElementType {
    /** 類,接口(包括注解類型)或枚舉的聲明 */
    TYPE,
 
    /** 屬性的聲明 */
    FIELD,
 
    /** 方法的聲明 */
    METHOD,
 
    /** 方法形式參數(shù)聲明 */
    PARAMETER,
 
    /** 構(gòu)造方法的聲明 */
    CONSTRUCTOR,
 
    /** 局部變量聲明 */
    LOCAL_VARIABLE,
 
    /** 注解類型聲明 */
    ANNOTATION_TYPE,
 
    /** 包的聲明 */
    PACKAGE
}

3、@RetentionPolicy

@Retention注解是指用來修飾自定義注解的生命周期。
注解的生命周期有三個(gè)階段:1、Java源文件階段;2、編譯到class文件階段;3、運(yùn)行期階段可以通過反射去操作目標(biāo)注解)。對(duì)應(yīng)下面的RetentionPolicy枚舉:

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.
     * 編譯器將注釋記錄在類文件中,但不需要在運(yùn)行時(shí)被VM保留。這是默認(rèn)值
     */
    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.
     * 編譯器將注釋記錄在類文件中,在運(yùn)行時(shí)由VM保留,因此它們可能被反射地讀取
     *
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME
}

  三、注解類型元素

如Autowired中required就是注解類型元素

在注解中,需要聲明一個(gè)變量屬性,默認(rèn)是public,而且必須是帶()的,如required(),而且一般我們會(huì)給他加默認(rèn)值,default xx,當(dāng)不加這個(gè)參數(shù)就會(huì)以默認(rèn)值表示。比如@Autowired,那required就是true,或者你直接使用@Autowired(required = false)。

四、自定義注解

如下,自定義了一個(gè)枚舉校驗(yàn)的注解,文章最后鏈接將是走入工作中實(shí)際場(chǎng)景而自定義注解。

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EnumValid {
    /**
     * fieldName
     * @return 
     */
    String name() default "fieldName";
    // 注解類型變量...
}

在DTO類中使用

public class ReqDTO {
    @EnumValid(name = "typeName")
    private String typeName;
}

具體作用文章未實(shí)現(xiàn),放在了下一篇文章。

好了,這篇文章講到這里,下一篇根據(jù)需求場(chǎng)景來給大家介紹如何實(shí)現(xiàn)自定義注解滿足我們的需求

到此這篇關(guān)于深入理解注解與自定義注解的一些概念的文章就介紹到這了,更多相關(guān)注解與自定義注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java:

    Java:"失效"的private修飾符

    本文主要介紹Java 失效的private修飾符,這里整理了相關(guān)資料說明private 修飾符的作用,如何使用并與C++ 做比較,有興趣的小伙伴可以參考下
    2016-08-08
  • SpringBoot實(shí)現(xiàn)文件上傳功能

    SpringBoot實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java十大經(jīng)典排序算法的實(shí)現(xiàn)圖解

    Java十大經(jīng)典排序算法的實(shí)現(xiàn)圖解

    Java常見的排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。本文詳解介紹Java十大十大經(jīng)典排序算法的實(shí)現(xiàn)以及圖解,需要的可以參考一下
    2022-03-03
  • Java中計(jì)算時(shí)間差的方法

    Java中計(jì)算時(shí)間差的方法

    這篇文章主要介紹了Java中計(jì)算時(shí)間差的方法,實(shí)例分析了java常見的三種計(jì)算時(shí)間差的技巧,需要的朋友可以參考下
    2015-06-06
  • redis做服務(wù)間通信工具的項(xiàng)目示例

    redis做服務(wù)間通信工具的項(xiàng)目示例

    Redis是一種高效的服務(wù)間通信工具,它以鍵值對(duì)的形式存儲(chǔ)數(shù)據(jù),并支持多種數(shù)據(jù)類型和豐富的操作,本文主要介紹了redis做服務(wù)間通信工具的項(xiàng)目示例,感興趣的可以了解一下
    2023-08-08
  • JVM如何處理異常深入詳解

    JVM如何處理異常深入詳解

    異常處理的兩大元素:拋出異常、捕獲異常,非正常處理的兩個(gè)方法。下面這篇文章主要給大家介紹了關(guān)于JVM如何處理異常的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2019-01-01
  • 基于redis setIfAbsent的使用說明

    基于redis setIfAbsent的使用說明

    這篇文章主要介紹了基于redis setIfAbsent的使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • SpringBoot中使用tkMapper的方法詳解

    SpringBoot中使用tkMapper的方法詳解

    這篇文章主要介紹了SpringBoot中使用tkMapper的方法詳解
    2022-11-11
  • 淺談Java中的克隆close()和賦值引用的區(qū)別

    淺談Java中的克隆close()和賦值引用的區(qū)別

    下面小編就為大家?guī)硪黄獪\談Java中的克隆close()和賦值引用的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • Spring aop+反射實(shí)現(xiàn)電話號(hào)加密

    Spring aop+反射實(shí)現(xiàn)電話號(hào)加密

    線上項(xiàng)目涉及大量查詢接口中,存在電話號(hào)明文展示不合規(guī)的問題。如果對(duì)每個(gè)接口返回結(jié)果中電話號(hào)相關(guān)字段修改相關(guān)代碼邏輯,則工作量較大花費(fèi)時(shí)間多。因此設(shè)計(jì)電話號(hào)加密注解,減少工作量。
    2021-06-06

最新評(píng)論

囊谦县| 襄垣县| 广河县| 肥城市| 民勤县| 铁岭县| 林州市| 台东市| 赤城县| 寿阳县| 泽州县| 读书| 朝阳区| 杭州市| 绩溪县| 新乡县| 张北县| 汕尾市| 中山市| 治县。| 平和县| 册亨县| 汉源县| 汝州市| 阜南县| 新巴尔虎左旗| 睢宁县| 杭锦后旗| 页游| 安远县| 连江县| 麻阳| 阳江市| 金昌市| 保康县| 屯留县| 乳山市| 临沧市| 洪湖市| 汾西县| 布拖县|