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

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

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

一、什么是注解?

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

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

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

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

  • 修飾符:訪問修飾符必須為public,不寫默認為pubic;
  • 關鍵字:關鍵字為@interface;
  • 注解名稱: 注解名稱為自定義注解的名稱,使用時還會用到;
  • 注解類型元素: 注解類型元素是注解中內容,可以理解成自定義接口的實現(xiàn)部分;
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屬性值會報錯。

總結

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

相關文章

  • springboot2.0 配置時間格式化不生效問題的解決

    springboot2.0 配置時間格式化不生效問題的解決

    這篇文章主要介紹了springboot2.0 配置時間格式化不生效問題的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • 解決Netty解碼http請求獲取URL亂碼問題

    解決Netty解碼http請求獲取URL亂碼問題

    這篇文章主要介紹了解決Netty解碼http請求獲取URL亂碼問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring中七種事務傳播機制詳解

    Spring中七種事務傳播機制詳解

    這篇文章主要介紹了Spring中七種事務傳播機制詳解,Spring在TransactionDefinition接口中規(guī)定了7種類型的事務傳播行為,Propagation枚舉則引用了這些類型,開發(fā)過程中我們一般直接用Propagation枚舉,需要的朋友可以參考下
    2024-01-01
  • Java8的default方法詳細介紹

    Java8的default方法詳細介紹

    這篇文章主要介紹了Java8的default方法,詳細介紹了什么是default方法,在多繼承時的處理等,需要的朋友可以參考下
    2014-04-04
  • IDEA教程創(chuàng)建SpringBoot前后端分離項目示例圖解

    IDEA教程創(chuàng)建SpringBoot前后端分離項目示例圖解

    在使用spring、mybatis等框架時,配置文件很復雜,有時復雜的讓人想放棄Java,使用C#。springboot出現(xiàn)這一切問題就都不是問題
    2021-10-10
  • RocketMQ線程池創(chuàng)建實現(xiàn)原理詳解

    RocketMQ線程池創(chuàng)建實現(xiàn)原理詳解

    這篇文章主要為大家介紹了RocketMQ線程池創(chuàng)建實現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • SpringBoot3整合mybatis-plus的實現(xiàn)

    SpringBoot3整合mybatis-plus的實現(xiàn)

    MyBatis-Plus是一個MyBatis的增強工具,在MyBatis的基礎上只做增強不做改變,本文主要介紹了Mybatis-Plus3.x的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • springboot整合 xxl-job及使用步驟

    springboot整合 xxl-job及使用步驟

    XXL-JOB是一個分布式任務調度平臺,用于解決分布式系統(tǒng)中的任務調度和管理問題,文章詳細介紹了XXL-JOB的架構,包括調度中心、執(zhí)行器和Web管理控制臺,并提供了使用步驟,包括下載、配置、啟動和創(chuàng)建執(zhí)行器和任務,感興趣的朋友一起看看吧
    2025-01-01
  • Java線程中的interrupt詳解

    Java線程中的interrupt詳解

    這篇文章主要介紹了Java線程中的interrupt詳解,interrupt翻譯成中文為“打斷”的意思,但實際上,interrupt()方法并非將一個線程打中斷的意思,本文提供了部分實現(xiàn)代碼,需要的朋友可以參考下
    2023-09-09
  • Java幾個重要的關鍵字詳析

    Java幾個重要的關鍵字詳析

    這篇文章主要介紹了Java幾個重要的關鍵字詳析,文章圍繞主題展開詳細的內容介紹,具有一定的參考一下,需要的小伙伴可以參考一下,希望對你的學習有所幫助
    2022-07-07

最新評論