欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、注解介紹

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

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

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

2、實(shí)現(xiàn)注解功能:編寫注解的功能,一般都是通過AOP在程序運(yùn)行時去捕獲這個標(biāo)記從而實(shí)現(xiàn)。(這步很關(guān)鍵,也是實(shí)現(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、運(yùn)行期階段可以通過反射去操作目標(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.
     * 編譯器將注釋記錄在類文件中,但不需要在運(yùn)行時被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)行時由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)。

四、自定義注解

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

@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ù)需求場景來給大家介紹如何實(shí)現(xiàn)自定義注解滿足我們的需求

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

相關(guān)文章

  • 使用maven整合Spring+SpringMVC+Mybatis框架詳細(xì)步驟(圖文)

    使用maven整合Spring+SpringMVC+Mybatis框架詳細(xì)步驟(圖文)

    這篇文章主要介紹了使用maven整合Spring+SpringMVC+Mybatis框架詳細(xì)步驟(圖文),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • java字符串相似度算法

    java字符串相似度算法

    這篇文章主要介紹了java字符串相似度算法,是Java實(shí)現(xiàn)比較典型的算法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • SpringBoot3.0整合chatGPT的完整步驟

    SpringBoot3.0整合chatGPT的完整步驟

    ChatGPT是OpenAI推出的一個語言模型系統(tǒng),它能夠?qū)崟r回答用戶提問,包括聊天、糾正語法錯誤,甚至是寫代碼、寫劇本等,由于可玩性很高,迅速在全球范圍內(nèi)風(fēng)靡起來,下面這篇文章主要給大家介紹了關(guān)于SpringBoot3.0整合chatGPT的完整步驟,需要的朋友可以參考下
    2022-12-12
  • Java NIO Files類讀取文件流方式小結(jié)

    Java NIO Files類讀取文件流方式小結(jié)

    本文主要介紹了Java NIO Files類讀取文件流方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 利用exe4j生成java的exe文件

    利用exe4j生成java的exe文件

    本文主要介紹了利用exe4j生成java的exe文件,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java管道流實(shí)現(xiàn)線程間通信過程解析

    Java管道流實(shí)現(xiàn)線程間通信過程解析

    這篇文章主要介紹了Java管道流實(shí)現(xiàn)線程間通信過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Spring Bean的線程安全問題

    Spring Bean的線程安全問題

    Spring容器中的Bean是否線程安全,本文主要介紹了Spring Bean的線程安全問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • java基本教程之Thread中start()和run()的區(qū)別 java多線程教程

    java基本教程之Thread中start()和run()的區(qū)別 java多線程教程

    這篇文章主要介紹了Thread中start()和run()的區(qū)別,Thread類包含start()和run()方法,它們的區(qū)別是什么?下面將對此作出解答
    2014-01-01
  • Java中截取字符串方法的兩種用法

    Java中截取字符串方法的兩種用法

    這篇文章主要給大家介紹了關(guān)于Java中截取字符串方法的兩種用法,在Java開發(fā)中經(jīng)常會涉及到對字符串進(jìn)行截取操作,字符串截取是一種常見且重要的字符串處理技巧,可以根據(jù)實(shí)際需求獲取字符串的指定部分,需要的朋友可以參考下
    2023-09-09
  • spring學(xué)習(xí)之util:properties的使用

    spring學(xué)習(xí)之util:properties的使用

    這篇文章主要介紹了spring學(xué)習(xí)之util:properties的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論