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

Java動(dòng)態(tài)設(shè)置注解值及原理詳解

 更新時(shí)間:2023年11月27日 09:58:43   作者:一碼評(píng)川  
這篇文章主要介紹了Java動(dòng)態(tài)設(shè)置注解值及原理詳解,AnnotationInvocationHandler是注解的代理hander,通過(guò)反射獲取類(lèi)的注解時(shí)會(huì)通過(guò)AnnotationInvocationHandler創(chuàng)建代理對(duì)象并將數(shù)據(jù)存儲(chǔ)到memberValues里,需要的朋友可以參考下

Java動(dòng)態(tài)注解值原理

描述:在運(yùn)行時(shí)根據(jù)需求更改注解中的值

一、步驟

1.定義類(lèi)

public class CadreListQueryDTO extends CadreBaseQueryDTO {

    /**
     * 出國(guó)事由
     */
    @QueryField(field = "A21.a2114",type = QueryField.LIKE)
    private String a2114;
}

2.定義方法進(jìn)行動(dòng)態(tài)設(shè)置

    /**
     * 動(dòng)態(tài)設(shè)置注解值
     *
     * @param annotation  
     * @param valueName
     * @param value
     * @param <T>
     */
    @SneakyThrows
    public static <T extends Annotation> void setValueToAnnotate(T annotation, String valueName, Object value) {
        InvocationHandler invocationHandler = null;
        if (Objects.nonNull(annotation)) {
            invocationHandler = Proxy.getInvocationHandler(annotation);
        }
        if (Objects.isNull(invocationHandler)) {
            return;
        }
        Field nameField = invocationHandler.getClass().getDeclaredField("memberValues");
        nameField.setAccessible(true);
        Map<String, Object> memberValues = (Map<String, Object>) nameField.get(invocationHandler);
        memberValues.put(valueName, value);
    }

3.測(cè)試

 public static void main(String[] args) {
        try {
            QueryField queryField =  CadreListQueryDTO.class.getDeclaredField("a2114").getAnnotation(QueryField.class);
            System.out.println("修改前:"+ queryField.field());
            setValueToAnnotate(queryField,"field","哈哈哈哈");
            System.out.println("修改前:"+ queryField.field());
        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
        }
    }

在這里插入圖片描述

二、原理分析

  • AnnotationInvocationHandler是注解的代理hander
  • 通過(guò)反射獲取類(lèi)的注解時(shí)會(huì)通過(guò)AnnotationInvocationHandler創(chuàng)建代理對(duì)象并將數(shù)據(jù)存儲(chǔ)到memberValues里

在這里插入圖片描述

修改memberValues里的數(shù)據(jù)

在這里插入圖片描述

獲取結(jié)果

在這里插入圖片描述

到此這篇關(guān)于Java動(dòng)態(tài)設(shè)置注解值及原理詳解的文章就介紹到這了,更多相關(guān)Java動(dòng)態(tài)注解值原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot項(xiàng)目與Nacos配置全過(guò)程

    SpringBoot項(xiàng)目與Nacos配置全過(guò)程

    本文介紹了如何在SpringBoot項(xiàng)目中使用Nacos作為配置中心,實(shí)現(xiàn)動(dòng)態(tài)配置管理和實(shí)時(shí)更新配置的能力,通過(guò)配置命名空間和yml文件,創(chuàng)建SpringBoot項(xiàng)目并添加Nacos依賴(lài),編寫(xiě)Controller和啟動(dòng)類(lèi),配置Tomcat啟動(dòng)程序,最終在Nacos服務(wù)端注冊(cè)成功
    2024-11-11
  • Java利用AQS實(shí)現(xiàn)自定義鎖

    Java利用AQS實(shí)現(xiàn)自定義鎖

    本文主要介紹了Java利用AQS實(shí)現(xiàn)自定義鎖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 一文帶你了解Java中IO流與Guava的使用

    一文帶你了解Java中IO流與Guava的使用

    Java為我們提供了非常多的操作IO的接口與類(lèi),幫助開(kāi)發(fā)者實(shí)現(xiàn)不同源間的數(shù)據(jù)傳輸,比如硬盤(pán)文件、網(wǎng)絡(luò)傳輸、應(yīng)用調(diào)用間的數(shù)據(jù)交互與傳遞。今天我們來(lái)簡(jiǎn)單了解下Java中的流?以及在Guava工具包中,針對(duì)IO操作做了什么樣的封裝與設(shè)計(jì)
    2022-11-11
  • java 字浮串提取方法匯集

    java 字浮串提取方法匯集

    用方法toCharArray public char[] toCharArray()
    2008-10-10
  • springIoc及注解的使用實(shí)例詳解

    springIoc及注解的使用實(shí)例詳解

    注解(Annotation)是一種在 Java 程序中以元數(shù)據(jù)的形式對(duì)代碼進(jìn)行標(biāo)記和說(shuō)明的機(jī)制,它可以被添加到類(lèi)、方法、字段、參數(shù)等程序元素上,用于提供額外的信息和指示,本文給大家介紹springIoc及注解的使用,感興趣的朋友一起看看吧
    2024-02-02
  • SpringBoot數(shù)據(jù)壓縮實(shí)踐方案

    SpringBoot數(shù)據(jù)壓縮實(shí)踐方案

    文章探討了Redis中處理大key的壓縮方案,包括拆分JSON結(jié)構(gòu)、使用GZIP/Deflater壓縮、優(yōu)化體積(如移除空格、縮短鍵名)、流式處理及分段存儲(chǔ),旨在降低內(nèi)存負(fù)擔(dān)并提升性能,感興趣的朋友跟隨小編一起看看吧
    2025-10-10
  • windows系統(tǒng)配置Java開(kāi)發(fā)環(huán)境變量

    windows系統(tǒng)配置Java開(kāi)發(fā)環(huán)境變量

    這篇文章主要介紹了windows系統(tǒng)配置Java開(kāi)發(fā)環(huán)境變量,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-12-12
  • SpringBoot分布式文件存儲(chǔ)數(shù)據(jù)庫(kù)mongod

    SpringBoot分布式文件存儲(chǔ)數(shù)據(jù)庫(kù)mongod

    MongoDB是一個(gè)基于分布式文件存儲(chǔ)的NoSQL數(shù)據(jù)庫(kù),由C++語(yǔ)言編寫(xiě),旨在為Web應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)中功能最豐富最像關(guān)系數(shù)據(jù)庫(kù)的
    2023-02-02
  • 使用java生成字母驗(yàn)證碼

    使用java生成字母驗(yàn)證碼

    這篇文章主要介紹了使用java生成字母驗(yàn)證碼的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Java日常開(kāi)發(fā)中讀寫(xiě)TXT文本舉例詳解

    Java日常開(kāi)發(fā)中讀寫(xiě)TXT文本舉例詳解

    這篇文章主要給大家介紹了關(guān)于Java日常開(kāi)發(fā)中讀寫(xiě)TXT文本,包括使用BufferedReader、Scanner、FileInputStream等類(lèi)進(jìn)行讀取,以及使用BufferedWriter、PrintWriter、FileOutputStream等類(lèi)進(jìn)行寫(xiě)入,需要的朋友可以參考下
    2024-12-12

最新評(píng)論

阳城县| 晋城| 浦东新区| 尚志市| 西贡区| 鄂伦春自治旗| 惠州市| 西青区| 五寨县| 松原市| 平舆县| 宁都县| 庆云县| 鹤岗市| 克东县| 墨玉县| 潼南县| 揭西县| 绩溪县| 绥滨县| 读书| 鹿泉市| 台南市| 吴堡县| 广汉市| 临邑县| 高碑店市| 文安县| 内丘县| 韶山市| 靖江市| 定州市| 天门市| 宝坻区| 耒阳市| 莎车县| 缙云县| 台南县| 化德县| 开江县| 阿拉善盟|