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

java中實現自定義注解方式

 更新時間:2024年11月04日 14:40:13   作者:YD_1989  
注解是Java中的一種元數據,可以修飾方法、類、參數和包等,自定義注解需要public修飾符、@interface關鍵字,以及注解名稱和類型元素,元注解如@Target、@Retention等用于修飾注解,指定注解的適用范圍和生命周期,自定義注解的使用涉及到通過反射解析注解

一、什么是注解?

注解是一種能被添加到java源代碼中的元數據,方法、類、參數和包都可以用注解來修飾。

注解可以看作是一種特殊的標記,可以用在方法、類、參數和包上,程序在編譯或者運行時可以檢測到這些標記而進行一些特殊的處理。

二、自定義注解需要的基本元素

自定義注解需要用到的東西:

  • 修飾符:訪問修飾符必須為public,不寫默認為pubic;
  • 關鍵字:關鍵字為@interface
  • 注解名稱: 注解名稱為自定義注解的名稱,使用時還會用到;
  • 注解類型元素: 注解類型元素是注解中內容,可以理解成自定義接口的實現部分
public @interface Info {
    String value() default "tracy";
    boolean isDelete();
}

三、自定義注解用到的元注解

JDK中有一些元注解,主要有@Target,@Retention,@Document,@Inherited用來修飾注解。

  • @Target:表明該注解可以應用的java元素類型

  • @Retention:表明該注解的生命周期

  • @Document:表明該注解標記的元素可以被Javadoc 或類似的工具文檔化
  • @Inherited:表明使用了@Inherited注解的注解,所標記的類的子類也會擁有這個注解
@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Info {
      String value() default "tracy";
      boolean isDelete();
}

四、自定義注解的使用

定義一個People類:

@Data
@Builder
@Define(isDelete = true)
public class People {

    /**
     * 姓名
     */
    private String name;

    /**
     * 年齡
     */
    private int age;

    /**
     * 是否有效
     */
    private boolean isDelete;

}

自定義注解:

import java.lang.annotation.*;

@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Define {

    String value() default "tracy";
    boolean isDelete();
}

利用反射解析注解

public static void main(String[] args) {

        try {
            //獲取Person的Class對象
            People person = People.builder().build();
            Class clazz = person.getClass();
            //判斷person對象上是否有Info注解
            if (clazz.isAnnotationPresent(Define.class)) {
                System.out.println("People類上配置了Define注解!");
                //獲取該對象上Info類型的注解
                Define infoAnno = (Define) clazz.getAnnotation(Define.class);
                System.out.println("person.name :" + infoAnno.value() + ",person.isDelete:" + infoAnno.isDelete());
            } else {
                System.out.println("People類上沒有配置Define注解!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

打印結果:

People類上配置了Define注解!

person.name :tracy,person.isDelete:true

對于一個類或者接口來說,Class類(java.lang包下)中提供了一些方法用于反射注解,當然對于字段、方法來說反射注解的方式很類似。

//返回指定的注解
getAnnotation
//判斷當前元素是否被指定注解修飾
isAnnotationPresent
//返回所有的注解
getAnnotations

使用注解注意點:

自定義注解中,設置了默認值的屬性在使用時可以不用定義值,但是沒被設置默認值的屬性使用時一定要定義屬性值。

示例:

如上圖,isTest注解沒有設置默認值,使用Log注解沒定義isTest屬性值會報錯。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 基于JDK動態(tài)代理原理解析

    基于JDK動態(tài)代理原理解析

    這篇文章主要介紹了基于JDK動態(tài)代理原理解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • SpringBoot整合SpringDataRedis的示例代碼

    SpringBoot整合SpringDataRedis的示例代碼

    這篇文章主要介紹了SpringBoot整合SpringDataRedis的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • 使用spring框架實現數據庫事務處理方式

    使用spring框架實現數據庫事務處理方式

    這篇文章主要介紹了使用spring框架實現數據庫事務處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • springboot實現自動郵件發(fā)送任務詳解

    springboot實現自動郵件發(fā)送任務詳解

    這篇文章主要介紹了Springboot中的郵件任務,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-04-04
  • Java下載文件的四種方式詳細代碼

    Java下載文件的四種方式詳細代碼

    這篇文章介紹了Java下載文件的四種方式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 詳解springboot通過Async注解實現異步任務及回調的方法

    詳解springboot通過Async注解實現異步任務及回調的方法

    這篇文章主要介紹了springboot通過Async注解實現異步任務及回調,文中通過一個簡單示例來直觀的理解什么是同步調用,在單元測試用例中,注入?SyncTask?對象,并在測試用例中執(zhí)行?doTaskOne(),doTaskTwo(),doTaskThree()?三個方法,具體實現方式跟隨小編一起看看吧
    2022-05-05
  • SpringMVC運行時出現404錯誤的解決辦法匯總(基本包含所有錯誤可能)

    SpringMVC運行時出現404錯誤的解決辦法匯總(基本包含所有錯誤可能)

    初學SpringMVC基本都會碰到404問題(確實也困擾了我好長時間),但出現404問題的原因有很多,如果確認路徑,代碼沒問題,并且服務器可以正常啟動,依然出現404問題的話,就根據本篇步驟逐一排查,需要的朋友可以參考下
    2024-04-04
  • Java中stream是什么及如何使用

    Java中stream是什么及如何使用

    在Java中,Stream(流)是一種用于操作集合(Collection)、數組等數據源的API,Stream的主要作用是進行數據的轉換、篩選、聚合等操作,可以極大地簡化對數據的處理,本文給大家介紹Java中stream是什么?有什么作用?如何使用?感興趣的朋友一起看看吧
    2023-10-10
  • Java實現批量導入excel表格數據到數據庫中的方法

    Java實現批量導入excel表格數據到數據庫中的方法

    這篇文章主要介紹了Java實現批量導入excel表格數據到數據庫中的方法,結合實例形式詳細分析了java導入Excel數據到數據庫的具體步驟與相關操作技巧,需要的朋友可以參考下
    2017-10-10
  • Spring中@RequestMapping、@RestController和Postman

    Spring中@RequestMapping、@RestController和Postman

    本文介紹了Spring框架中常用的@RequestMapping和@RestController注解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-10-10

最新評論

广安市| 崇左市| 固镇县| 登封市| 友谊县| 合阳县| 泗阳县| 廊坊市| 安西县| 孙吴县| 大化| 明光市| 宕昌县| 牡丹江市| 哈尔滨市| 凤凰县| 庄浪县| 鄂伦春自治旗| 宜良县| 青田县| 沾化县| 潼南县| 洪雅县| 新龙县| 勐海县| 灌阳县| 河南省| 九江市| 隆回县| 诸城市| 措美县| 南郑县| 镇安县| 股票| 阜宁县| 开平市| 十堰市| 沭阳县| 河曲县| 梁河县| 微山县|