精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

女人被狂躁c到高潮| 日韩视频在线播放| 日韩成人高清视频| 久草成人在线| 3d成人h动漫网站入口| 国产毛片久久久久久国产毛片| 秋霞欧美在线观看| 免费看精品久久片| 中文字幕日本精品| 成人做爰www看视频软件| 日韩电影免费观| 一区二区高清免费观看影视大全| 精品日本一区二区三区| 一区二区日韩在线观看| 99精品视频免费观看视频| 色阁综合伊人av| 日本三级日本三级日本三级极| av成人免费| 婷婷六月综合亚洲| 成人在线免费观看网址| 国产一级在线| 丁香一区二区三区| 国产欧美最新羞羞视频在线观看| 午夜精品久久久久久久久久久久久蜜桃| 欧美美女视频| 日韩精品视频中文在线观看| 91大神免费观看| 四虎4545www精品视频| 午夜久久电影网| 伊人久久在线观看| 久久99精品久久久久久野外| 国产亚洲精品超碰| 精品国产乱码一区二区三区四区| 国产免费av观看| 日韩高清中文字幕一区| 欧美亚洲成人xxx| 精品无码免费视频| 婷婷亚洲最大| 中文字幕av一区二区三区谷原希美| 亚洲精品第二页| 日韩欧美中文字幕一区二区三区| 欧美日韩在线播放| 国产视频一区二区视频| 新版的欧美在线视频| 亚洲福利视频一区二区| 伊人再见免费在线观看高清版| 在线播放日本| 国产精品丝袜一区| 小说区图片区图片区另类灬| 精品视频二区| 国产亚洲一区二区三区四区| 欧美国产综合视频| 手机福利小视频在线播放| 成av人片一区二区| 国产精品国产一区二区| 丰满人妻一区二区三区免费| 国产黄人亚洲片| 91九色偷拍| 亚洲AV无码精品色毛片浪潮| 国产成人在线视频免费播放| 99久久免费国| 丰满熟妇乱又伦| 成人一区二区三区视频在线观看| 国产激情美女久久久久久吹潮| 亚洲风情第一页| 国产999精品久久久久久绿帽| 97伦理在线四区| www.黄色片| 成人久久久精品乱码一区二区三区| 不卡视频一区二区| 国产成人手机在线| 91香蕉视频污在线| 欧美在线视频二区| 天天影视久久综合| 97久久久久久久| 97香蕉碰碰人妻国产欧美| 日韩区欧美区| 亚洲成人教育av| 中国黄色a级片| 欧美日韩在线二区| 久久精品免费电影| 黄色激情视频在线观看| 中文精品视频| 国产精品久久久久av免费| 欧美一区免费看| 精品无码三级在线观看视频| 91视频最新| 亚洲 美腿 欧美 偷拍| 国产亚洲欧美一区在线观看| 亚洲三级一区| 婷婷丁香在线| 日韩欧中文字幕| 91pony九色| 久久久久久久久久久久久久久久久久久久 | 国产在线一区二区三区播放| 全色精品综合影院| 国产精品国产三级国产aⅴ入口 | 精品国产乱码久久久久久丨区2区| 男人的天堂在线免费视频| 中文字幕亚洲在| 妞干网视频在线观看| 自由日本语热亚洲人| 欧美日韩成人综合天天影院 | 国产又粗又猛又爽又黄的视频一| 国产精品一区二区你懂的| 久久久久免费网| 国产在线激情视频| 一本色道久久综合精品竹菊| 久久久久亚洲av无码麻豆| 全国精品免费看| 超碰97人人做人人爱少妇| 国内自拍视频在线播放| 久久精品国产99国产| 久久综合福利| av网址在线| 欧美色区777第一页| 在线观看免费视频黄| 久久免费av| 2020久久国产精品| 国产高清免费av| 国产欧美一区二区三区鸳鸯浴| 高清欧美精品xxxxx| www.久久久.com| 国产亚洲精品久久久久久牛牛| 精品视频一区二区在线观看| 激情五月激情综合网| 日韩影院一区| 忘忧草在线日韩www影院| 欧美成人官网二区| 日韩三级在线观看视频| 免费高清视频精品| 欧美一区二区三区在线免费观看| heyzo在线播放| 日韩欧美一区二区不卡| 美女三级黄色片| 蜜桃免费网站一区二区三区| 欧美久久久久久一卡四| 精品人人视频| 亚洲第一页中文字幕| 精品一级少妇久久久久久久| 国产精品亚洲综合一区在线观看| 在线电影看在线一区二区三区| 国产精品迅雷| 国产视频精品免费播放| 日韩 国产 在线| 国产成人av一区二区三区在线| 热这里只有精品| 亚洲午夜国产成人| 日韩中文字幕精品| 一本色道久久综合亚洲| 国产精品理论在线观看| 视色视频在线观看| 久久精品av| 国产日韩精品在线观看| 毛片网站在线免费观看| 欧美顶级少妇做爰| 夫妻性生活毛片| 国产在线播放一区三区四| 亚洲一卡二卡区| 疯狂欧洲av久久成人av电影| 色多多国产成人永久免费网站 | 国产在线精品一区二区不卡了| 夜夜爽www精品| 国产精品一区二区三区四区在线观看 | dy888夜精品国产专区| 欧美理论片在线播放| 亚洲第一中文字幕在线观看| 久久99精品波多结衣一区| 久久蜜臀精品av| 男人的天堂日韩| 欧美成人激情| 国产超碰91| 蜜桃视频在线网站| 亚洲人成电影在线播放| 中文字幕人妻精品一区| 亚洲精品视频在线观看免费 | ,亚洲人成毛片在线播放| 亚洲欧美日韩在线不卡| 亚洲av永久无码精品| 日韩精品五月天| 日韩 欧美 自拍| 欧美1区2区3区4区| 国产精品视频久久久久| 日本片在线看| 亚洲视频在线观看网站| 国产伦子伦对白视频| 精品国产乱码久久久久久婷婷| 偷拍女澡堂一区二区三区| 久久国产精品免费| 成人免费性视频| 国产一区二区三区四区五区传媒| 成人写真福利网| 成av人片在线观看www| 伊人久久大香线蕉av一区二区| 国产哺乳奶水91在线播放| 天天色天天爱天天射综合| 极品尤物一区二区| 成人免费av资源| 国产福利在线免费| 一道本一区二区| 在线观看一区二区三区三州| 伦理一区二区三区| 成人亲热视频网站| 在线成人av观看| 欧美老肥婆性猛交视频| 国产日本在线| 亚洲国产精品va在线看黑人| 久久久久久久久久一级| 亚洲成人av在线电影| 999久久久国产| 久久久久久久久久久黄色| 中文字幕 欧美 日韩| 日韩电影一二三区| koreanbj精品视频一区| 欧美 日韩 国产一区二区在线视频| 欧美日韩一区在线视频| 97se亚洲| 亚洲最大的免费| 久久婷婷五月综合色丁香| 欧美野外猛男的大粗鳮| 黄色在线看片| 蜜月aⅴ免费一区二区三区| jizz在线观看| 亚洲美女av网站| 天堂中文资源在线观看| 欧美mv日韩mv国产网站app| 中文字幕在线观看免费| 色妞www精品视频| 精品成人av一区二区在线播放| 一区二区三区在线观看国产| 国产又粗又长又黄的视频| 国产亚洲欧美激情| 亚洲国产欧美视频| kk眼镜猥琐国模调教系列一区二区| 午夜免费视频网站| 日本大胆欧美人术艺术动态| 亚洲乱码国产一区三区| 国产欧美激情| 日日橹狠狠爱欧美超碰| 亚洲国产一区二区三区a毛片| 女人被男人躁得好爽免费视频| 婷婷亚洲图片| 992tv快乐视频| 欧美日韩一区自拍 | 卡一卡二卡三在线观看| 久久视频一区二区| 草草地址线路①屁屁影院成人| 北岛玲一区二区三区四区| 亚洲精品国产成人av在线| 成人av综合在线| 男男做爰猛烈叫床爽爽小说| av在线免费不卡| 无套内谢大学处破女www小说| 菠萝蜜视频在线观看一区| 精品国产一区在线| 9l国产精品久久久久麻豆| 人体私拍套图hdxxxx| 91理论电影在线观看| 熟女俱乐部一区二区视频在线| 久久亚洲一区二区三区四区| 精品国产无码在线观看| 国产日韩三级在线| 国产在线免费av| 亚洲免费高清视频在线| 久久香蕉精品视频| 懂色av一区二区三区| 探花视频在线观看| 欧美午夜宅男影院| 国产剧情精品在线| 精品久久久久久久久久久院品网 | 中文字幕日韩av电影| 欧美日韩xx| 欧美日本亚洲视频| 天堂√中文最新版在线| 国产成人精品优优av| 亚瑟国产精品| 国产精品视频一区二区三区经| 亚洲黄色录像| 一区高清视频| 亚洲日本成人| 天美星空大象mv在线观看视频| 激情综合一区二区三区| 国产情侣久久久久aⅴ免费| 久久人人爽人人爽| 少妇视频一区二区| 亚洲成人动漫av| 一本色道久久综合精品婷婷| 亚洲第一天堂av| 亚洲图片88| 97视频免费观看| 日韩国产一二三区| 精品国产乱码久久久久| 91久久久精品国产| 午夜精品久久久久久久无码| 精品亚洲成a人在线观看| 中文字幕乱码在线| 中文字幕一区二区不卡| 日韩在线观看第一页| 欧美久久一二三四区| 天堂网在线播放| 精品国产欧美一区二区三区成人| 成年女人在线看片| 成人黄在线观看| 亚洲人成精品久久久| 欧美少妇在线观看| 日韩精品一卡二卡三卡四卡无卡| 稀缺小u女呦精品呦| 国产精品不卡一区| 成人公开免费视频| 精品欧美乱码久久久久久| freemovies性欧美| 18久久久久久| 麻豆国产一区二区三区四区| 欧美性色综合网| 97久久久久久久| 91精品久久久久久久久99蜜臂| 无码国产精品高潮久久99| 久久精品99国产精品酒店日本 | 亚洲一区二区视频在线| 中文字幕乱码在线观看| 亚洲人成电影网站色| 91福利在线免费| 97自拍视频| 亚洲午夜精品一区二区国产| 一区二区xxx| 国产视频不卡一区| 亚洲精品男人天堂| 精品成人免费观看| 羞羞视频在线免费国产| 成人伊人精品色xxxx视频| 日韩精品不卡一区二区| 国产第一页视频| 91偷拍与自偷拍精品| 日本五十熟hd丰满| 欧美成人高清电影在线| 黄色av电影在线播放| 成人久久一区二区三区| 成人写真视频| 九色porny自拍| 中文字幕av一区 二区| 做爰视频毛片视频| 在线播放国产精品| 999国产精品亚洲77777| 日韩精品福利视频| 日本vs亚洲vs韩国一区三区二区| 非洲一级黄色片| 日本道色综合久久| 国产高清视频免费最新在线| 国产成人综合精品在线| 精品成av人一区二区三区| 日本新janpanese乱熟| 日本一二三四高清不卡| 中文字幕一区二区三区波野结 | 日韩精品免费看| 日本在线啊啊| 色姑娘综合网| 精品一二三四在线| 久久久久久久久精| 亚洲国产精品字幕| 在线看的毛片| 日韩欧美一区二区三区四区| 免费视频最近日韩| 久久免费看少妇高潮v片特黄| 日韩欧美国产三级| 精品丝袜在线| 亚洲一一在线| 国产裸体歌舞团一区二区| 久久精品国产亚洲av麻豆色欲 | 亚洲一区二区在线| 精品99视频| 久久精品国产亚洲av麻豆| 欧美亚洲综合在线| 91香蕉在线观看| 国产精品一区二区欧美| 欧美综合国产| 性生交大片免费全黄| 精品国产91亚洲一区二区三区婷婷| 美女av在线免费看| 亚洲第一综合| 国产不卡在线播放| 国产午夜精品久久久久| www.欧美精品一二三区| 色综合一区二区日本韩国亚洲| 日本福利视频导航| 91毛片在线观看| 男人天堂视频网| 少妇激情综合网| 国产欧美三级电影| 日本熟妇人妻中出| 洋洋av久久久久久久一区| 欧洲视频在线免费观看| 成人中文字幕在线观看| 夜久久久久久| 无码黑人精品一区二区| 精品亚洲一区二区三区四区五区| 黄色成人在线观看网站| 欧美视频在线免费播放| 1024成人网色www| 欧洲一区av| 国产欧美一区二区视频 |