当前位置: 首页 > news >正文

09.注解Plus

1.运行时注解及反射配合

2.没有标题,好好看

Class.getMethods() //仅获取本类所有公共方法(含继承)
Class.getDeclaredMethods() //获取本类所有方法(含私有、保护、公共,但不会继承)

以上返回的是本类中的所有方法对象数组。将Method换成Field,返回的是本类中的所有字段对象数组。

3.反射得注解

  getAnnotations() //返回Annotation数组,是某个类/方法/字段/参数上的所有注解实例,该实例使用时需要进行强转isAnnotationPresent(指定的注解.class) getAnnotation(指定的注解.class)

上述方法由Class、Method、Field、 Parameter 每一个调用,分别得到类/方法/字段/参数上的所有注解实例。

4.类的结构(即类的组成)

  • Class

  • Method

    • getName() 得到方法名

    • getParameters() 返回Parameter[],每个Parameter对象包含:

      • 参数的类型、参数的名称、是否为可变参数、是否为隐式参数
    • getParameterAnnotations 返回的是Annotation[][]

    • Field

      • set(bean, value)、get(bean)

5.使用注解给方法的参数传值

Object[] finalParams = generateFinalParams(parameters, manualParams);//先生成最终参数,manualParams不用注解传参
public static Object[] generateFinalParams(Parameter[] parameters, Object[] manualParams) {List<Object> findParams = new ArrayList<>();int manualParamsCount = 0;for (Parameter param : parameters) {Object paramValue = null;customAnno = param.getAnnotation(注解名);if (customAnno != null) { // 提取注解类的value值 } else { paramValue = manualParam[manualParamsCount++] }}
}

反射解析注解并注入配置值

public static void invokeWithConfig(Object target, String methodName, Object... manualParams) {Class<?> clazz = target.getClass();Method method = findMethodByName(clazz, methodName);...method.invoke(target, finalParams);
}findMethodByName(Class<?> clazz, String methodName) {for (Method method : clazz.getDeclaredMethods()) {if (method.getName().equals(methodName)) {return method;}}return null;
}

6.具体理解
假如我要执行 save 方法:save (@custom("小白") String name, int age, String desc),则传入save所在的类实例,以及按顺序传入没有注解的参数值,invokeWithConfig(service, "save", 18, "小白真好看")

http://www.jsqmd.com/news/58793/

相关文章:

  • 交叉编译GDB调试
  • 2025 铝合金门窗十大品牌权威榜:五维实测甄选行业标杆
  • 编程题库 No.16 加班薪水UP
  • AI元人文:在档口前构筑公平排队的文明舞台
  • 详细介绍:css学习盒模型:
  • python题库 No.17 大运预选
  • Playwright高级用法全解析:从自动化到工程化的进阶指南 - 教程
  • OpenAI与Broadcom合作部署10吉瓦自研AI加速器
  • 20251202周二日记
  • why America is Bag
  • [转]概率图模型:原理与技术-2.1概率论
  • 20251202 之所思 - 人生如梦
  • 基于CNN卷积神经网络和GEI步态能量提取的视频人物步态识别算法matlab仿真
  • [ROS 系列学习教程] ROS与操作系统版本对应关系
  • C# 闭包捕获变量的经典问题分析
  • 2025年河南工业大学2025新生周赛(6)
  • 容斥原理练手:cf1750D
  • 12/2
  • 12.13任务
  • 数学2
  • cgi,fastcgi,wsgi,uwsgi,uWSGI分别是什么
  • 别再只懂二分类!逻辑回归+Softmax多分类实战,保姆级教程奉上 - 详解
  • Day7 Scrum冲刺博客
  • 07.自定义子容器
  • cjw_蓝桥杯python基础学习系列一—_语言基础
  • 从硬盘I/O到网络传输:Kafka与RocketMQ读写模型及零拷贝技术深度对比
  • 测试飞书一面
  • 华三无线集中转发模式配置
  • 技术总监亲述:工作授权不是甩锅,掌握这8步让团队战斗力提升300%
  • AI人工智能:分享技术干货