精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring 工具類深度解析:AnnotationUtils 與 ReflectionUtils

開發 前端
在??Java??開發領域,反射機制與注解是實現框架靈活性和擴展性的核心技術,但原生??API??存在代碼繁瑣、功能局限等問題。??Spring??框架作為??Java??生態的主流開發框架,提供了??AnnotationUtils??和??ReflectionUtils??兩大工具類,分別對注解處理和反射操作進行了高度封裝。

引言

Java開發領域,反射機制與注解是實現框架靈活性和擴展性的核心技術,但原生API存在代碼繁瑣、功能局限等問題。Spring框架作為Java生態的主流開發框架,提供了AnnotationUtilsReflectionUtils兩大工具類,分別對注解處理和反射操作進行了高度封裝。

AnnotationUtils:注解處理的瑞士軍刀

AnnotationUtilsSpring框架專為注解處理設計的工具類,它解決了Java原生反射API在注解繼承、組合注解解析等場景下的不足,提供了便捷、高效的注解獲取與屬性解析能力,是實現注解驅動開發的關鍵工具。

Java原生Class.getAnnotation()方法僅能獲取當前元素直接標注的注解,無法處理注解的繼承(如父類方法注解被子類繼承)和組合注解(如@RestController組合@Controller@ResponseBody)場景。AnnotationUtils則彌補了這一缺陷,其核心功能包括:

  • 跨層級獲取注解:支持從類、方法、字段、參數等元素及其父類 / 接口中獲取注解;
  • 組合注解解析:自動識別組合注解中的元注解,返回最終生效的注解實例;
  • 注解屬性提取:便捷獲取注解的屬性值,支持默認值自動填充;
  • 注解存在性判斷:快速判斷元素是否被指定注解(含繼承或組合注解)標注。

實戰示例:注解解析與屬性提取

定義自定義注解
// 標注在方法上,運行時生效
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyPermission {
    // 權限名稱(默認屬性,可省略屬性名直接賦值)
    String value() default "guest";
    // 是否需要登錄(額外屬性)
    boolean needLogin() default true;
}

解析注解:

public class AnnotationParser {
    public static void main(String[] args) throws NoSuchMethodException {
        // 1. 獲取UserController的deleteUser方法
        Method deleteMethod = UserController.class.getMethod("deleteUser", Long.class);
        // 2. 解析方法上的@MyPermission注解
        MyPermission deletePermission = AnnotationUtils.findAnnotation(deleteMethod, MyPermission.class);
        // 3. 提取注解屬性值
        String deletePermValue = (String) AnnotationUtils.getValue(deletePermission);
        boolean deleteNeedLogin = (boolean) AnnotationUtils.getValue(deletePermission, "needLogin");
        System.out.println("deleteUser方法權限:" + deletePermValue + ",是否需要登錄:" + deleteNeedLogin);
        // 輸出結果:deleteUser方法權限:admin,是否需要登錄:true

        // 4. 解析getUserInfo方法的注解
        Method getMethod = UserController.class.getMethod("getUserInfo", Long.class);
        MyPermission getPermission = AnnotationUtils.findAnnotation(getMethod, MyPermission.class);
        String getPermValue = (String) AnnotationUtils.getValue(getPermission);
        boolean getNeedLogin = (boolean) AnnotationUtils.getValue(getPermission, "needLogin");
        System.out.println("getUserInfo方法權限:" + getPermValue + ",是否需要登錄:" + getNeedLogin);
        // 輸出結果:getUserInfo方法權限:guest,是否需要登錄:false
    }
}

ReflectionUtils:反射操作的簡化器

Java原生反射API(如Class.getDeclaredMethod()Field.setAccessible())需要處理大量異常和訪問權限問題,代碼冗余且易出錯。ReflectionUtils作為Spring的反射工具類,封裝了這些復雜操作,提供了簡潔、安全的反射調用能力,尤其適合處理私有成員(私有方法、私有字段)。

ReflectionUtils的核心目標是降低反射使用門檻,其主要功能包括:

  • 成員查找:快速獲取類的方法、字段(支持私有、父類成員);
  • 權限處理:自動設置私有成員的可訪問性(無需手動調用setAccessible(true));
  • 方法執行:直接調用方法(含無參/有參、靜態/實例方法)并返回結果;
  • 字段操作:獲取或修改字段值(含靜態字段、私有字段);
  • 批量處理:遍歷類的所有方法或字段,執行自定義回調邏輯。

實戰示例:私有成員的操作

public class OrderService {
    // 私有靜態字段:訂單前綴
    private static String ORDER_PREFIX = "ORD-";
    // 私有實例字段:訂單數量
    private int orderCount = 0;

    // 私有實例方法:生成訂單號(參數為用戶ID)
    private String generateOrderNo(Long userId) {
        orderCount++; // 每次調用訂單數量+1
        return ORDER_PREFIX + userId + "-" + System.currentTimeMillis() + "-" + orderCount;
    }

    // 私有靜態方法:驗證訂單號格式
    private static boolean validateOrderNo(String orderNo) {
        return orderNo != null && orderNo.startsWith(ORDER_PREFIX);
    }
}

ReflectionUtils操作私有成員:

public class ReflectionDemo {
    public static void main(String[] args) {
        OrderService orderService = new OrderService();

        // 1. 調用私有實例方法:generateOrderNo
        // 1.1 查找方法(參數類型為Long)
        Method generateMethod = ReflectionUtils.findMethod(OrderService.class, "generateOrderNo", Long.class);
        ReflectionUtils.makeAccessible(generateMethod);
        // 1.2 執行方法(實例對象為orderService,參數為1001L)
        String orderNo1 = (String) ReflectionUtils.invokeMethod(generateMethod, orderService, 1001L);
        String orderNo2 = (String) ReflectionUtils.invokeMethod(generateMethod, orderService, 1001L);
        System.out.println("生成的訂單號1:" + orderNo1); // 示例輸出:ORD-1001-1690000000000-1
        System.out.println("生成的訂單號2:" + orderNo2); // 示例輸出:ORD-1001-1690000000001-2

        // 2. 調用私有靜態方法:validateOrderNo
        Method validateMethod = ReflectionUtils.findMethod(OrderService.class, "validateOrderNo", String.class);
        ReflectionUtils.makeAccessible(validateMethod);
        boolean isValid1 = (boolean) ReflectionUtils.invokeMethod(validateMethod, null, orderNo1); // 靜態方法target傳null
        boolean isValid2 = (boolean) ReflectionUtils.invokeMethod(validateMethod, null, "INVALID-123");
        System.out.println("訂單號1是否有效:" + isValid1); // 輸出:true
        System.out.println("無效訂單號是否有效:" + isValid2); // 輸出:false

        // 3. 修改私有靜態字段:ORDER_PREFIX
        Field prefixField = ReflectionUtils.findField(OrderService.class, "ORDER_PREFIX");
        ReflectionUtils.makeAccessible(prefixField);
        ReflectionUtils.setField(prefixField, null, "NEW-ORD-"); // 靜態字段target傳null
        // 驗證修改結果(調用generateOrderNo生成新訂單號)
        String newOrderNo = (String) ReflectionUtils.invokeMethod(generateMethod, orderService, 1002L);
        System.out.println("修改前綴后的訂單號:" + newOrderNo); // 示例輸出:NEW-ORD-1002-1690000000002-3

        // 4. 獲取私有實例字段:orderCount
        Field countField = ReflectionUtils.findField(OrderService.class, "orderCount");
        ReflectionUtils.makeAccessible(countField);
        int count = (int) ReflectionUtils.getField(countField, orderService);
        System.out.println("當前訂單數量:" + count); // 輸出:3
    }
}

協同聯系

在實際開發中,兩者常結合使用,形成反射查找成員 + 注解解析屬性的完整流程。例如Spring MVC框架解析@RequestMapping注解的邏輯可簡化為:

  • ReflectionUtils.findMethod()獲取Controller類的所有方法;
  • AnnotationUtils.findAnnotation()判斷方法是否標注@RequestMapping
  • AnnotationUtils.getValue()提取@RequestMappingpath、method等屬性;
  • 根據屬性值注冊請求映射關系。
// 結合反射與注解,批量解析Controller方法的@RequestMapping
public class RequestMappingParser {
    public static void parseController(Class<?> controllerClass) {
        // 1. 用ReflectionUtils遍歷Controller的所有方法
        ReflectionUtils.doWithMethods(controllerClass, method -> {
            // 2. 用AnnotationUtils判斷方法是否有@RequestMapping注解
            RequestMapping requestMapping = AnnotationUtils.findAnnotation(method, RequestMapping.class);
            if (requestMapping != null) {
                // 3. 解析注解屬性
                String[] paths = (String[]) AnnotationUtils.getValue(requestMapping, "path");
                RequestMethod[] methods = (RequestMethod[]) AnnotationUtils.getValue(requestMapping, "method");
                // 4. 輸出請求映射信息
                System.out.println("方法:" + method.getName() + ",路徑:" + Arrays.toString(paths) + ",請求方式:" + Arrays.toString(methods));
            }
        });
    }

    // 測試:解析UserController的請求映射
    public static void main(String[] args) {
        parseController(UserController.class);
    }
}


責任編輯:武曉燕 來源: 一安未來
相關推薦

2025-04-02 03:55:00

MCPAI智能體

2023-12-14 13:28:00

Spring流程Web

2024-05-29 08:00:00

2022-12-07 08:02:43

Spring流程IOC

2024-10-12 12:55:26

2024-11-08 16:54:38

2013-04-07 17:57:16

SDN網絡架構

2024-12-24 14:01:10

2023-04-19 10:44:23

自動駕駛

2024-12-20 16:46:22

Spring三級緩存

2017-02-15 10:01:49

大數據機器學習深度學習

2025-02-27 08:50:00

RocketMQ開發代碼

2025-03-27 04:10:00

2024-01-10 08:14:10

Java反射工具

2013-01-22 09:44:57

OpenStackKVM

2025-02-03 16:58:39

2022-08-17 07:52:31

Spring循環依賴單例池

2024-09-09 00:00:07

2024-01-29 08:00:00

架構微服務開發
點贊
收藏

51CTO技術棧公眾號

成人51免费| 黄色av网址在线| 欧美偷拍自拍| 欧美午夜片在线看| 一本一道久久a久久精品综合| 波多野结衣家庭主妇| 欧美亚洲国产精品久久| 在线不卡免费欧美| www国产无套内射com| 黄色片一区二区三区| 亚洲欧美日韩国产综合精品二区 | 亚洲特级黄色片| 91av精品| 亚洲精品一区二区三区婷婷月| 国产xxxxx视频| 国产在线更新| jlzzjlzz亚洲日本少妇| 国产精品久久久久久久久借妻| 永久免费看mv网站入口| 二区三区精品| 精品日韩中文字幕| 天天干天天操天天干天天操| 天堂中文资源在线观看| 久久成人18免费观看| 性色av一区二区三区| 在线观看免费小视频| 亚洲精品观看| 精品久久久久久久久国产字幕| 亚洲人成网站在线观看播放| 亚洲国产精品欧美久久| 日韩高清一区在线| 久久久伊人欧美| 国产18无套直看片| 青草久久视频| 欧美一级片在线| 国产福利一区视频| 久久不射影院| 国产精品成人一区二区三区夜夜夜| 狠狠色综合欧美激情| 国产精品一区二区免费视频| 日本视频一区二区| 97超级碰碰碰| 免费一级全黄少妇性色生活片| 国产日韩欧美一区二区三区| 亚洲福利视频网| 亚洲小视频网站| 黑人巨大亚洲一区二区久| 亚洲一区二区三区四区中文字幕| 正在播放一区二区三区| 国模吧精品人体gogo| 99久久国产综合精品女不卡| 99九九电视剧免费观看| 在线观看免费视频一区| 日本不卡123| 日韩免费在线看| 日韩在线视频免费播放| 激情婷婷欧美| 久久久久久91| 日韩一级片av| 欧美ab在线视频| 久久精品视频在线| 五月天色婷婷丁香| 欧美黄色大片在线观看| 在线不卡国产精品| 亚洲日本精品视频| 国产不卡av一区二区| 精品视频在线导航| 一二三不卡视频| 欧美**vk| 亚洲天堂av在线播放| 一级性生活毛片| 免费成人av| 亚洲人成网站色ww在线| 日本成人午夜影院| 欧美一区二区三区高清视频| 中文字幕国产精品| 国产美女高潮视频| 99久久夜色精品国产亚洲1000部| 深夜福利国产精品| 国产老头老太做爰视频| 欧美在线看片| 欧美激情videoshd| 日韩乱码人妻无码中文字幕| 国产日韩综合| 国产精品久久久久久久久久东京 | 水蜜桃精品av一区二区| 最近2019年日本中文免费字幕| 亚洲天堂av中文字幕| 欧美激情电影| 欧美国产日韩xxxxx| 日干夜干天天干| 免费看黄裸体一级大秀欧美| 国产v综合ⅴ日韩v欧美大片| 免费黄色片视频| 韩国av一区二区三区在线观看| 亚洲iv一区二区三区| 亚洲精品成av人片天堂无码| 91小视频免费看| 日韩一区不卡| 成人在线app| 午夜精品成人在线视频| 天天干天天干天天干天天干天天干| 久久天堂影院| 亚洲电影免费观看| 欧洲av一区二区三区| 这里只有精品在线| 国语自产精品视频在免费| 国产一区免费看| 国产一本一道久久香蕉| 激情五月综合色婷婷一区二区 | 日本香蕉视频在线观看| 韩日成人影院| 日韩一区二区三区视频在线 | 丁香花高清在线观看完整版| 欧美性xxxxx极品| 黄色aaaaaa| 神马香蕉久久| 久久国产精品久久久久久| 国产成人在线播放视频| 久久精品国产亚洲aⅴ| 国产亚洲一区在线播放 | 久久综合久久88| 天天操天天操天天操天天| 久久成人综合网| 欧美不卡福利| 色呦呦网站在线观看| 91久久国产综合久久| 下面一进一出好爽视频| 精品久久久久久久| 久久噜噜噜精品国产亚洲综合| 中文字幕 欧美激情| 波多野结衣在线aⅴ中文字幕不卡| 亚洲看片网站| 亚洲伊人av| 精品噜噜噜噜久久久久久久久试看| 亚洲黄色小说视频| av成人黄色| 成人在线视频网址| av免费在线观看网址| 在线观看日韩毛片| 亚洲天堂成人av| 狠狠爱www人成狠狠爱综合网| 国产精品入口免费视频一| 天天操天天射天天| 一区二区三区美女视频| 天堂网在线免费观看| 免费欧美一区| 欧美亚洲激情在线| 无套内谢的新婚少妇国语播放| 亚洲精品视频在线观看免费| 中文字幕成人免费视频| 精品视频黄色| 国产z一区二区三区| 天天干,夜夜操| 午夜影院在线观看欧美| 韩国三级视频在线观看| 欧美国产综合| 成人h在线播放| 日本片在线看| 欧美tickling网站挠脚心| 欧美国产日韩在线观看成人| 国产一区免费电影| 在线国产伦理一区| 成人亚洲精品| 理论片在线不卡免费观看| 亚洲天堂aaa| 日韩毛片视频在线看| 在线观看免费不卡av| 91精品国产91久久久久久密臀 | 色老头一区二区三区在线观看| 日批视频免费在线观看| 国产亚洲一区二区三区在线观看 | 貂蝉被到爽流白浆在线观看| 日本不卡在线视频| 亚洲国产一区二区三区在线| 欧美xxxx性| 日韩在线观看免费高清| 国产麻豆精品一区| 亚洲一区二区三区在线播放| 人妻av一区二区| 亚洲一区中文| 亚洲一区二区三区在线观看视频| 亚洲国产aⅴ精品一区二区三区| 久久精彩免费视频| 性猛交xxxx乱大交孕妇印度| 午夜精品久久久久久不卡8050| 人妻体内射精一区二区| 青青草视频一区| 麻豆md0077饥渴少妇| 精品一区二区三区免费看| 欧美精品精品精品精品免费| 天堂在线中文资源| 欧美日精品一区视频| 青春草免费视频| av动漫一区二区| 欧美黄色免费影院| 成人无号精品一区二区三区| 亚洲a级在线观看| 国产一二三在线| 中文字幕亚洲第一| 国产人妖一区二区| 一区二区三区产品免费精品久久75| 在线免费看黄色片| 免费人成黄页网站在线一区二区| 成人一区二区av| 久久成人高清| 国产精品91久久久| 欧美性爽视频| 在线午夜精品自拍| 好男人在线视频www| 91福利视频久久久久| 中文字幕av免费在线观看| 久久一区二区视频| 黄色片免费网址| 视频一区欧美日韩| 小说区图片区图片区另类灬| 天天综合91| 欧美一级片在线播放| 国产精品一区二区三区视频网站| 亚洲国产精品人久久电影| 中日精品一色哟哟| 午夜精品免费在线观看| 国产极品美女在线| 国产亚洲短视频| 一边摸一边做爽的视频17国产| 丝袜a∨在线一区二区三区不卡| 欧美一级中文字幕| 日韩专区精品| 欧美三级网色| 日韩免费一级| 91精品久久久久久久久中文字幕| 少妇在线看www| 久久伊人精品天天| av大片在线观看| 91精品欧美久久久久久动漫| 国产一级在线播放| 亚洲欧美激情小说另类| 欧美熟妇激情一区二区三区| 成人午夜av电影| 香蕉视频禁止18| 国产精品一区毛片| 欧美激情 国产精品| 北条麻妃国产九九九精品小说| 波多野结衣一区二区三区在线观看| 三上悠亚亚洲一区| 51ⅴ精品国产91久久久久久| 欧美伦理免费在线| 美女性感视频久久久| 91免费在线| 最近2019年好看中文字幕视频| 欧美777四色影视在线| 亚洲精品美女网站| 午夜视频www| 亚洲精品国产电影| 天天干,夜夜爽| 亚洲国产中文字幕在线观看| 免费观看毛片网站| 精品国产乱码久久久久久久| 亚洲高清视频在线播放| 日韩一区二区在线看片| 国产乱色精品成人免费视频| 欧美久久久影院| 91福利免费视频| 在线播放国产精品二区一二区四区| 在线免费观看日韩视频| 欧美日韩成人综合在线一区二区 | 欧美性猛交xxxx乱大交| 国偷自拍第113页| 日韩欧美成人精品| 亚洲不卡在线视频| 欧美在线看片a免费观看| 国产免费一区二区三区四区五区| 欧美日韩国产一区中文午夜| 国产区在线观看视频| 欧美日韩国产中文精品字幕自在自线| 久久国产精品系列| 一本色道综合亚洲| 特级西西444www高清大视频| 欧美日韩国产区一| 国产精品自拍电影| 日韩欧美国产一区二区三区 | julia一区二区中文久久94| 亚洲一二av| 久久综合九九| 欧美综合在线视频观看| 日本久久高清视频| 狠色狠色综合久久| 人妻有码中文字幕| 美日韩一区二区| 亚洲av毛片在线观看| 99久久国产免费看| 国产一二三av| 亚洲免费资源在线播放| 日本一区二区不卡在线| 在线日韩一区二区| 国产草草影院ccyycom| 亚洲第一天堂av| 视频午夜在线| www.欧美精品一二三区| av美女在线观看| 国产成人精品久久二区二区| 四虎影视国产精品| 国产一区在线免费| 青青草97国产精品麻豆| 国产美女永久无遮挡| 久久一区亚洲| 极品人妻一区二区| 91在线丨porny丨国产| 色婷婷av777| 亚洲男人电影天堂| 无码一区二区三区在线观看| 日韩欧美视频在线 | 一区二区三区视频在线| 最新超碰在线| 青草青草久热精品视频在线观看| 啪啪av大全导航福利综合导航| 国产伦精品一区二区三区免费视频| 精品日韩一区| 3d动漫一区二区三区| 精品一区二区久久久| 熟妇高潮精品一区二区三区| 亚洲人妖av一区二区| 欧美在线观看不卡| 欧美一级黄色录像| aaa在线免费观看| 亚洲**2019国产| 免费精品一区| 亚洲精品日韩在线观看| 亚洲日本免费| www.桃色.com| 中文字幕巨乱亚洲| 久久免费激情视频| 精品日产卡一卡二卡麻豆| 日本中文字幕伦在线观看| 欧美做受高潮1| 国产极品模特精品一二| 日韩人妻一区二区三区蜜桃视频| 日本美女一区二区| 国产人妻一区二区| 岛国视频午夜一区免费在线观看| 国产av一区二区三区精品| 综合欧美国产视频二区| 蜜桃精品在线| 欧美日韩精品免费观看| 一本综合精品| 亚洲色偷偷色噜噜狠狠99网 | 久久久久香蕉视频| 欧美日韩精品欧美日韩精品一综合| 日本中文字幕一区二区有码在线| 久久人人看视频| 一本色道69色精品综合久久| 狠狠干视频网站| 国产毛片精品视频| 在线观看亚洲网站| 在线成人av网站| 黄色网页在线播放| 国产综合色香蕉精品| 成人激情开心网| 黄色片视频在线| 国产精品无人区| 亚洲视频久久久| 色阁综合伊人av| 成人短视频软件网站大全app| 亚洲 国产 欧美一区| 日本最新不卡在线| 男女男精品视频网站| 欧美日韩日本视频| 看黄网站在线| 99国精产品一二二线| 狠狠入ady亚洲精品| 性欧美丰满熟妇xxxx性久久久| 亚洲va在线va天堂| 无套内谢的新婚少妇国语播放| 6080yy精品一区二区三区| 九一精品国产| 天天干在线影院| 中文字幕日韩欧美一区二区三区| 亚洲一区二区影视| 欧美成人午夜剧场免费观看| 一区二区三区高清在线观看| 国产妇女馒头高清泬20p多| 91久色porny| 黄色一区二区视频| 久久亚洲精品一区| 风间由美性色一区二区三区四区 | 亚洲东热激情| 91精品人妻一区二区| 欧美体内she精视频| av电影免费在线观看| 国产一区二区视频在线免费观看| 亚洲欧美日韩国产一区二区| jizz日本在线播放| 欧美一区二区三区爱爱| 爱搞国产精品| 亚洲精品成人久久久998| 白白色 亚洲乱淫| 国产精品色综合| 国产91在线播放精品91| 欧美精品成人| 黄色裸体一级片|