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

java中實(shí)現(xiàn)自定義注解方式

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

一、什么是注解?

注解是一種能被添加到j(luò)ava源代碼中的元數(shù)據(jù),方法、類、參數(shù)和包都可以用注解來修飾。

注解可以看作是一種特殊的標(biāo)記,可以用在方法、類、參數(shù)和包上,程序在編譯或者運(yùn)行時(shí)可以檢測到這些標(biāo)記而進(jìn)行一些特殊的處理。

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

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

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

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

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

  • @Target:表明該注解可以應(yīng)用的java元素類型

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

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

四、自定義注解的使用

定義一個(gè)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();
        }
    }

打印結(jié)果:

People類上配置了Define注解!

person.name :tracy,person.isDelete:true

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

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

使用注解注意點(diǎn):

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

示例:

如上圖,isTest注解沒有設(shè)置默認(rèn)值,使用Log注解沒定義isTest屬性值會(huì)報(bào)錯(cuò)。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

    SpringBoot整合SpringDataRedis的示例代碼

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

    使用spring框架實(shí)現(xiàn)數(shù)據(jù)庫事務(wù)處理方式

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

    springboot實(shí)現(xiàn)自動(dòng)郵件發(fā)送任務(wù)詳解

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

    Java下載文件的四種方式詳細(xì)代碼

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

    詳解springboot通過Async注解實(shí)現(xiàn)異步任務(wù)及回調(diào)的方法

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

    SpringMVC運(yùn)行時(shí)出現(xiàn)404錯(cuò)誤的解決辦法匯總(基本包含所有錯(cuò)誤可能)

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

    Java中stream是什么及如何使用

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

    Java實(shí)現(xiàn)批量導(dǎo)入excel表格數(shù)據(jù)到數(shù)據(jù)庫中的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)批量導(dǎo)入excel表格數(shù)據(jù)到數(shù)據(jù)庫中的方法,結(jié)合實(shí)例形式詳細(xì)分析了java導(dǎo)入Excel數(shù)據(jù)到數(shù)據(jù)庫的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • Spring中@RequestMapping、@RestController和Postman

    Spring中@RequestMapping、@RestController和Postman

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

最新評論

繁峙县| 新晃| 依安县| 中卫市| 通许县| 延安市| 土默特右旗| 仁寿县| 莱州市| 富裕县| 文成县| 绥江县| 阿荣旗| 开化县| 剑河县| 库伦旗| 醴陵市| 迁安市| 锦屏县| 西丰县| 黔江区| 琼中| 南丰县| 隆德县| 绥德县| 新巴尔虎左旗| 井研县| 宕昌县| 定襄县| 临泽县| 娱乐| 平陆县| 石台县| 雅安市| 彝良县| 泌阳县| 博爱县| 鹤峰县| 固始县| 邵阳市| 浑源县|