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

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

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

一、注解介紹

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

自定義注解的步驟可以簡化成三步

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

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

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

通過我們最常見的一個注解來解釋這些注解概念:@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的定義可知道,最基本的三個元注解

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

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

1、@Documented與@Inherited

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

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

2、@Target

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

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

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

3、@RetentionPolicy

@Retention注解是指用來修飾自定義注解的生命周期。
注解的生命周期有三個階段:1、Java源文件階段;2、編譯到class文件階段;3、運行期階段可以通過反射去操作目標(biāo)注解)。對應(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.
     * 編譯器將注釋記錄在類文件中,但不需要在運行時被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.
     * 編譯器將注釋記錄在類文件中,在運行時由VM保留,因此它們可能被反射地讀取
     *
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME
}

  三、注解類型元素

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

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

四、自定義注解

如下,自定義了一個枚舉校驗的注解,文章最后鏈接將是走入工作中實際場景而自定義注解。

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

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

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

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

相關(guān)文章

  • Java:

    Java:"失效"的private修飾符

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

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

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

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

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

    Java中計算時間差的方法

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

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

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

    JVM如何處理異常深入詳解

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

    基于redis setIfAbsent的使用說明

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

    SpringBoot中使用tkMapper的方法詳解

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

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

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

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

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

最新評論

买车| 甘南县| 诸城市| 黎川县| 来凤县| 温州市| 明溪县| 鸡泽县| 上林县| 安龙县| 桓仁| 朝阳县| 新疆| 讷河市| 富源县| 南开区| 金川县| 大兴区| 白水县| 灵石县| 梁山县| 淮南市| 朔州市| 东港市| 兰溪市| 龙游县| 二手房| 竹山县| 堆龙德庆县| 西乌珠穆沁旗| 湾仔区| 上林县| 乌拉特中旗| 社会| 南皮县| 驻马店市| 九龙坡区| 陕西省| 安图县| 鲁甸县| 江陵县|