Spring ReflectionUtils 反射工具介绍和使用

一、ReflectionUtils

Java 中,反射(Reflection)是一种强大的机制,允许程序在运行时动态地检查类、获取类的信息、调用类的方法、访问或修改类的属性等。Java 的反射机制提供了一组类和接口,位于 java.lang.reflect 包中,通过反射可以动态加载类、动态获取类的信息、动态创建对象、动态调用方法、动态访问和修改属性等。

Spring Framework 中也有一个也反射相关的工具类,那就是 ReflectionUtils ,它位于 org.springframework.util 包中,简化 Java 反射操作,提供了以下几个功能:

  • 遍历类的属性和方法:提供了静态方法 doWithFields()doWithMethods(),允许你遍历一个类的所有属性和方法,并且可以对每个属性和方法执行自定义的操作。

  • 查找指定名称的属性和方法:提供了方法 findField()findMethod(),用于查找类中指定名称的属性和方法。

  • 执行方法:提供了方法 invokeMethod(),可以用于执行类中的方法。

  • 获取和设置属性值:提供了方法 getField()setField(),可以用于获取和设置类的属性值。

  • 复制属性值:提供了方法 shallowCopyFieldState(),可以用于将源对象的属性值复制到目标对象中。

1. 获取类的属性

public class Test1 {private String name;private String sex;private int age;public static void main(String[] args) {ReflectionUtils.doWithFields(Test1.class, field -> {System.out.println("field name: " + field.getName());System.out.println("field type: " + field.getType());});}}

在这里插入图片描述

2. 获取属性的内容

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Test2 {private String name;private String sex;private int age;public static void main(String[] args) {Test2 target = new Test2("张三", "男", 21);ReflectionUtils.doWithFields(target.getClass(), fieldName ->Optional.ofNullable(ReflectionUtils.findField(target.getClass(), fieldName.getName())).ifPresent(field -> {ReflectionUtils.makeAccessible(field);Object value = ReflectionUtils.getField(field, target);System.out.println("fileName: " + fieldName.getName() + " , value: " + value);}));}
}

在这里插入图片描述

3. 动态修改属性的值

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Test2 {private String name;private String sex;private int age;public static void main(String[] args) {Test2 target = new Test2("张三", "男", 21);Field field = ReflectionUtils.findField(target.getClass(), "sex");assert field == null;ReflectionUtils.makeAccessible(field);ReflectionUtils.setField(field,target,"女");System.out.println(target.toString());}
}

在这里插入图片描述

4. 动态执行方法

public class Test3 {public void t1() {System.out.println("this is t1 method ! ");}public String t2(String param) {return "this is t2 method ! param: " + param;}public static void main(String[] args) {Test3 target = new Test3();Method t1 = ReflectionUtils.findMethod(target.getClass(), "t1");assert t1 != null;ReflectionUtils.invokeMethod(t1, target);Method t2 = ReflectionUtils.findMethod(target.getClass(), "t2", String.class);assert t2 != null;String res = (String) ReflectionUtils.invokeMethod(t2, target, "测试");System.out.println(res);}}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2809995.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

光伏预测 | Matlab基于CNN-SE-Attention-ITCN的多特征变量光伏预测

光伏预测 | Matlab基于CNN-SE-Attention-ITCN的多特征变量光伏预测 目录 光伏预测 | Matlab基于CNN-SE-Attention-ITCN的多特征变量光伏预测预测效果基本描述模型简介程序设计参考资料 预测效果 基本描述 Matlab基于CNN-SE-Attention-ITCN的多特征变量光伏预测 运行环境: Matla…

轻量级模型,重量级性能,TinyLlama、LiteLlama小模型火起来了,针对特定领域较小的语言模型是否与较大的模型同样有效?

轻量级模型,重量级性能,TinyLlama、LiteLlama小模型火起来了,针对特定领域较小的语言模型是否与较大的模型同样有效? 当大家都在研究大模型(LLM)参数规模达到百亿甚至千亿级别的同时,小巧且兼具高性能的小…

多目标追踪概述

1. 目标跟踪分类 单目标跟踪:在视频的初始帧画面上框出单个目标,预测后续帧中该目标的大小与位置多目标跟踪:追踪多个目标的大小和位置,且每一帧中目标的数量和位置都可能变化 2. 多目标跟踪目前的主要问题 形态变化&#xff1a…

Android 获取USB相机支持的分辨率有多少

直接上代码 private fun getCamera() {// 获取系统相机服务val cameraManager requireContext().getSystemService(Context.CAMERA_SERVICE) as? CameraManagerif (cameraManager ! null) {// 在这里进行相机管理器的操作// 获取相机设备的 ID(这里假设使用第一个相…

小封装高稳定性振荡器新系列(2.0 x 1.6 mm) 用于光学应用

小封装高稳定性振荡器新系列(2.0 x 1.6 mm) 用于光学应用,兼容OIF标准 Sg2016egn / sg2016vgn, sg2016ehn / sg2016vhn 来自光模块市场的需求爱普生提供SG2016系列解决方案SG2016系列:高稳定性,低抖动晶体振荡器规格尺寸,框图,引…

Java零基础 - 关键字 instanceof

哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后…

无限创意之旅:深度挖掘Sora AI视频模型的可能性【文章底部添加可得内推码汇总表】

目录 引言 第一部分:Sora AI视频模型的特性 第二部分:Sora在创意领域的应用 第三部分:Sora对影视产业的影响 【文章底部添加可得内推码汇总表】 引言 21世纪,随着AI人工智能的迅猛发展,AI视频模型正成为数字创意领…

17.材质和外观

1.图形学中的材质 在图形学中,材质(Material)是用来描述物体外观和表面特性的属性集合。它包含了控制光的反射、折射、吸收以及其他光学效果的信息,从而决定了物体在渲染过程中的外观。 渲染方程中那一项和材质有关? …

HSE化工应急安全生产管理平台:信息化、流程化的安全管理新模式

随着化工行业的快速发展,安全生产管理日益成为企业发展的关键所在。在这一背景下,HSE化工应急安全生产管理平台应运而生,以信息平台为载体,数据驱动、风险管理为中心,致力于实现安全生产的动态、实时和智能化管理。本文…

【工具分享】批量查找文件并移动复制,咕嘎批量文件清单快速查找搜索文件,比bat批量查找文件并复制更简单一些

在工作中,像电商或者照相馆以及政府工程的工作人员,整理文件时,我们经常遇到批量查找部分文件,比如在10万个文件内查找5000个文件,把5000个文件分离出来,存在另外一个地方 如果是在电脑中挨个搜那要搜很久&…

客户至上!CRM系统如何助力企业提升客户满意度?

产品复购率是企业经营中的重要指标。要提升产品的复购率,除了产品质量需要过硬,客户服务的质量和效率也是重要影响因素,而CRM管理系统能够帮助达成这一点。 我们将通过这篇文章讲解CRM系统为何能提高客户满意度。 1.协助掌握客户的需要 企业…

【小尘送书-第十四期】《高效使用Redis:一书学透数据存储与高可用集群》

大家好,我是小尘,欢迎你的关注!大家可以一起交流学习!欢迎大家在CSDN后台私信我!一起讨论学习,讨论如何找到满意的工作! 👨‍💻博主主页:小尘要自信 &#x1…

JAVA集合进阶(Set、Map集合)

一、Set系列集合 1.1 认识Set集合的特点 Set集合是属于Collection体系下的另一个分支&#xff0c;它的特点如下图所示 下面我们用代码简单演示一下&#xff0c;每一种Set集合的特点。 //Set<Integer> set new HashSet<>(); //无序、无索引、不重复 //Set<…

云HIS支持连锁集团化管理,1+N模式,支撑运营,管理,决策多位一体

目录 云HIS系统特色 使用简易化 连锁集团化 可扩展化 系统描述 云HIS系统优势 &#xff08;1&#xff09;客户/用户角度 &#xff08;2&#xff09;开发/运维角度 &#xff08;3&#xff09;成功应用案例 HIS分系统&#xff08;HIS子系统&#xff09; 1、医疗业务子…

el-submenu is-opened 展开/闭合;el-submenu is-opened保持一个子菜单的展开控制

写了个mes系统目录 点击子菜单展开后&#xff0c;上一级菜单没有默认关闭。主流后台管理系统大部分都是保持一个子菜单关闭状态、 问度娘无果后&#xff0c;查询官网&#xff0c;一个属性搞定。 unique-opened 是否只保持一个子菜单的展开 加在 <el-menu 组件上即可 完整代…

Excel工作表控件实现滚动按钮效果

实例需求&#xff1a;工作表中有多个Button控件&#xff08;工作表Form控件&#xff09;和一个ScrollBar控件&#xff08;工作表ActiveX控件&#xff0c;名称为ScrollBar2&#xff09;&#xff0c;需要实现如下图所示效果。点击ScrollBar控件实现按钮的滚动效果&#xff0c;实际…

SpringBoot自带的tomcat的最大连接数和最大的并发数

先说结果&#xff1a;springboot自带的tomcat的最大并发数是200&#xff0c; 最大连接数是&#xff1a;max-connectionsaccept-count的值 再说一下和连接数相关的几个配置&#xff1a; 以下都是默认值&#xff1a; server.tomcat.threads.min-spare10 server.tomcat.threa…

8.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-游戏底层功能对接类GameProc的实现

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;通过逆向分析确定游戏明文接收数据过程 码云地址&#xff08;master 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/titan 码云版本号&#xff1a;bcf7559184863febdcad819e48aaa…

科技云报道:黑马Groq单挑英伟达,AI芯片要变天?

科技云报道原创。 近一周来&#xff0c;大模型领域重磅产品接连推出&#xff1a;OpenAI发布“文字生视频”大模型Sora&#xff1b;Meta发布视频预测大模型 V-JEPA&#xff1b;谷歌发布大模型 Gemini 1.5 Pro&#xff0c;更毫无预兆地发布了开源模型Gemma… 难怪网友们感叹&am…

11:日志分析系统ELK|Elasticsearch|kibana

日志分析系统ELK&#xff5c;Elasticsearch&#xff5c;kibana 日志分析系统ELKELK概述Elasticsearch安装Elasticsearch部署Elasticsearch集群Elasticsearch插件 熟悉Elasticsearch的API调用_cat API创建 tedu 索引使用 PUT 方式增加数据查询数据修改数据删除数据 KibanaKibana…