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

Java Reflect如何利用反射獲取屬性上的注解

 更新時間:2024年09月27日 08:49:59   作者:我一直在流浪  
AnnotatedElement接口是Java反射機制的一部分,用于讀取運行中程序的注釋信息,通過getAnnotation、getAnnotations、isAnnotationPresent和getDeclaredAnnotations方法,可以訪問和判斷注解,Field類實現(xiàn)了該接口

1. AnnotatedElement接口

AnnotatedElement接口表示目前正在此 JVM 中運行的程序的一個已注釋元素,該接口允許反射性地讀取注釋。

調(diào)用AnnotatedElement對象的如下方法可以訪問Annotation信息:

  • getAnnotation(Class<T>annotationClass):返回該程序元素上存在的指定類型的注釋,如果該類型的注釋不存在,則返回null。
  • Annotation[] getAnnotations():返回此元素上存在的所有注釋。
  • boolean isAnnotationPresent(Class<?extendsAnnotation>annotationClass):判斷該程序元素上是否存在指定類型的注釋,如果存在則返回true,否則返回false。
  • Annotation[] getDeclaredAnnotations():返回直接存在于此元素上的所有注釋。與此接口中的其他方法不同,該方法將忽略繼承的注釋。

2. Field類實現(xiàn)了AnnotatedElement接口

3. 獲取屬性上的注解

① 自定義注解

@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = {ElementType.METHOD,ElementType.TYPE,ElementType.FIELD,ElementType.PARAMETER} )
public @interface MyParam1 {

    String value() default "";
}
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = {ElementType.METHOD,ElementType.TYPE,ElementType.FIELD,ElementType.PARAMETER} )
public @interface MyParam2 {

    String value() default "";
}

② 給方法參數(shù)上添加注解

@ControllerAdvice
@Controller
@MyAnnotation(name = "李四",age=12)
public class Test {

    @MyField1("name1")
    @MyField2("name2")
    @Value("name")
    private String name;

    @MyField1("email1")
    @MyField2("email2")
    @Value("email")
    private String email;

}

③ 獲取屬性上的注解

public class Main {
    public static void main(String[] args) throws NoSuchMethodException, ClassNotFoundException {
        // 得到Class類對象
        Class<?> clazz = Class.forName("com.example.redislock.annotation.Test");

        // 獲取類的所有屬性
        Field[] fields = clazz.getDeclaredFields();

        // 獲取屬性上的所有注解
        int i = 1;
        for (Field field : fields) {
            System.out.println("第"+i+++"個屬性的注解有:");
            Annotation[] annotations = field.getAnnotations();
            for (Annotation annotation : annotations) {
                System.out.println(annotation.annotationType());
            }
        }

        // 獲取屬性上指定MyField2類型的注解
        System.out.println();
        System.out.println("獲取屬性上指定MyField2類型的注解:");
        for (Field field : fields) {
            MyField2 myField2 = field.getAnnotation(MyField2.class);
            System.out.println(myField2);
            System.out.println(myField2.value());
        }

        // 獲取屬性上指定MyField2類型的注解
        System.out.println();
        System.out.println("獲取屬性上指定MyField2類型的注解:");
        for (Field field : fields) {
            MyField2[] myField2s = field.getAnnotationsByType(MyField2.class);
            for (MyField2 myField2 : myField2s) {
                System.out.println(myField2);
            }
        }
    }
}

總結(jié)

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

相關(guān)文章

  • SpringCloud Feign遠(yuǎn)程調(diào)用實現(xiàn)詳解

    SpringCloud Feign遠(yuǎn)程調(diào)用實現(xiàn)詳解

    Feign是Netflix公司開發(fā)的一個聲明式的REST調(diào)用客戶端; Ribbon負(fù)載均衡、 Hystrⅸ服務(wù)熔斷是我們Spring Cloud中進(jìn)行微服務(wù)開發(fā)非?;A(chǔ)的組件,在使用的過程中我們也發(fā)現(xiàn)它們一般都是同時出現(xiàn)的,而且配置也都非常相似
    2022-11-11
  • Java使用Tinify實現(xiàn)圖片無損壓縮(4M無損壓縮到1M)的方法

    Java使用Tinify實現(xiàn)圖片無損壓縮(4M無損壓縮到1M)的方法

    在當(dāng)今的數(shù)字化時代,圖片已成為網(wǎng)站、應(yīng)用和社交媒體中不可或缺的元素,然而,大尺寸的圖片不僅會增加頁面或者客戶端加載時間,還會占用大量的存儲空間,本文將詳細(xì)介紹如何利用Tinify壓縮圖片,并將其上傳至OSS,重點介紹圖片壓縮實現(xiàn)方式,需要的朋友可以參考下
    2024-08-08
  • 詳解JSON與?Java對象之間的轉(zhuǎn)化

    詳解JSON與?Java對象之間的轉(zhuǎn)化

    在現(xiàn)在的日常開發(fā)中,不管前端還是后端,JSON?格式的數(shù)據(jù)是用得比較多的,甚至可以說無處不在。所以本文主要來講講JSON?格式的數(shù)據(jù)與?Java?對象之間的轉(zhuǎn)化吧
    2023-03-03
  • Java中的三種代理模式詳解

    Java中的三種代理模式詳解

    這篇文章主要介紹了Java中的三種代理模式詳解,代理模式的關(guān)鍵點是:代理對象與目標(biāo)對象.代理對象是對目標(biāo)對象的擴展,并會調(diào)用目標(biāo)對象,文中提供了部分代碼,需要的朋友可以參考下
    2023-08-08
  • spring自定義注解實現(xiàn)攔截器的實現(xiàn)方法

    spring自定義注解實現(xiàn)攔截器的實現(xiàn)方法

    本篇文章主要介紹了spring自定義注解實現(xiàn)攔截器的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • SpringBoot啟動報錯的11個高頻問題排查與解決終極指南

    SpringBoot啟動報錯的11個高頻問題排查與解決終極指南

    這篇文章主要為大家詳細(xì)介紹了SpringBoot啟動報錯的11個高頻問題的排查與解決,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2025-03-03
  • SpringBoot2.x版本中,使用SpringSession踩的坑及解決

    SpringBoot2.x版本中,使用SpringSession踩的坑及解決

    這篇文章主要介紹了SpringBoot2.x版本中,使用SpringSession踩的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java8版本base64加密解密的實例

    java8版本base64加密解密的實例

    下面小編就為大家分享一篇java8版本base64加密解密的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Mybatis添加Ehcache支持的方法

    Mybatis添加Ehcache支持的方法

    mybatis添加ehcache支持非常簡單,只主要在sql映射文件中添加一行代碼就可以實現(xiàn),糾結(jié)是什么代碼呢,這么神奇,帶著這樣問題一起通過本文學(xué)習(xí)吧
    2016-08-08
  • netty-grpc一次DirectByteBuffer內(nèi)存泄露問題

    netty-grpc一次DirectByteBuffer內(nèi)存泄露問題

    這篇文章主要介紹了netty-grpc一次DirectByteBuffer內(nèi)存泄露問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論