码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SpringBoot AnnotationUtils工具类的使用


    目录

    • 一. 前期准备
    • 二. 使用自定义注解标记业务方法
    • 三. 原生Java获取注解
    • 四. AnnotationUtils工具类获取
      • 4.1 AnnotationUtils.findAnnotation获取类注解
      • 4.2 AnnotationUtils.findAnnotation获取方法注解
      • 4.3 AnnotationUtils.getValue获取注解上的指定属性值
      • 4.4 AnnotationUtils.getAnnotationAttributes获取注解上的所有属性值


    一. 前期准备

    ⏹若干自定义注解

    import java.lang.annotation.*;
    
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    public @interface PayCode {
    
        // 支付方法的业务code
        String payCode();
    	
        // 支付方法的名称
        String name();
    }
    
    import java.lang.annotation.*;
    
    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD})
    public @interface PayOrder {
    
        int value() default 0;
    }
    
    import java.lang.annotation.*;
    
    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.FIELD})
    public @interface Version {
    
        String value() default "0";
    }
    

    二. 使用自定义注解标记业务方法

    @PayCode(payCode = "alia", name = "支付宝支付")
    @Component
    public class AliaPay {
    
        @PayOrder(value = 1)
        public void pay() {
            System.out.println("===发起支付宝支付1===");
        }
    }
    
    @PayCode(payCode = "jingdong", name = "京东支付")
    @Component
    public class JingDongPay {
    
        @Version(value = "1.1")
        public String version;
    
        @PayOrder(value = 20)
        public void pay() {
            System.out.println("===发起京东支付===");
        }
    }
    

    三. 原生Java获取注解

    import org.springframework.boot.CommandLineRunner;
    import org.springframework.util.ReflectionUtils;
    
    @Component
    public class ZTestController implements CommandLineRunner {
    
        @Resource
        private AliaPay aliaPay;
    	
    	@Resource
        private JingDongPay jingDongPay;
    
        @Override
        public void run(String... args) throws Exception {
    
            // ⏹原生Java的方式获类上的注解
            PayCode aliPay = aliaPay.getClass().getAnnotation(PayCode.class);
            System.out.println(aliPay);
            // @com.example.jmw.common.annotation.PayCode(payCode=alia, name=支付宝支付)
    		
    		 // ⏹原生Java的方式获取属性上的注解
            Field versionField = ReflectionUtils.findField(jingDongPay.getClass(), "version");
            Version version = versionField.getAnnotation(Version.class);
        }
    }
    

    四. AnnotationUtils工具类获取

    4.1 AnnotationUtils.findAnnotation获取类注解

    // AnnotationUtils的方式获取指定类上的注解
    import org.springframework.core.annotation.AnnotationUtils;
    
    PayCode aliPay = AnnotationUtils.findAnnotation(aliaPay.getClass(), PayCode.class);
    

    4.2 AnnotationUtils.findAnnotation获取方法注解

    import org.springframework.util.ReflectionUtils;
    import org.springframework.core.annotation.AnnotationUtils;
    
    // 通过反射获取aliaPay对象上的pay方法的Method对象
    Method payMethod = ReflectionUtils.findMethod(aliaPay.getClass(), "pay");
    // 获取方法上的注解
    PayOrder payOrder = AnnotationUtils.findAnnotation(payMethod, PayOrder.class);
    

    4.3 AnnotationUtils.getValue获取注解上的指定属性值

    // AnnotationUtils的方式获取指定类上的注解
    PayCode aliPayAnnotation = AnnotationUtils.findAnnotation(aliaPay.getClass(), PayCode.class);
    // 获取注解上指定的值
    Object payCode = AnnotationUtils.getValue(aliPayAnnotation, "payCode");
    

    4.4 AnnotationUtils.getAnnotationAttributes获取注解上的所有属性值

    // 获取注解上所有的属性值
    PayCode aliPay = AnnotationUtils.findAnnotation(aliaPay.getClass(), PayCode.class);
    Map<String, Object> annotationAttributes = AnnotationUtils.getAnnotationAttributes(aliPay);
    
  • 相关阅读:
    Vue项目
    STM32CubeMX教程22 FSMC - 8080并行接口TFT-LCD驱动
    php 实现:给图片加文字水印,图片水印,压缩图片
    Java知识点之单例模式
    python面向对象的一个简单实例
    【ASP.NET】Hello World
    springboot actuator:开放全部(部分)端点、端点映射、端点保护
    蓝桥杯嵌入式第12届真题(完成) STM32G431
    Python 编程基础 | 第五章-类与对象 | 5.2、数据成员
    End-to-End Adversarial-Attention Network for Multi-Modal Clustering
  • 原文地址:https://blog.csdn.net/feyehong/article/details/127046402
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号