什么是 Java 反射机制

Java 反射机制允许程序在运行时查看任意对象所属的类,获取类的内部信息(包括构造器、字段和方法等),并能动态地调用对象的方法或构造器。它基于类的元数据进行操作,元数据描述了类的结构、属性和行为。

作用:

  • 获取类信息:获取类的名称、包名、父类、实现的接口、构造器、字段和方法等。
  • 创建对象:即便在编译时未知类的具体信息,运行时也能动态创建类的实例 。比如通过 Class 对象的 newInstance() 方法(前提是有无参构造函数 ),或获取构造器后调用其 newInstance() 方法创建实例。
  • 调用方法:能调用类的方法,包括私有方法。
  • 访问和修改属性:获取和修改类的字段值,包括私有字段 。

获取 Class 对象的方式有

.class 语法:如 String.class ,编译时已知类即可用。

getClass() 方法:对象实例调用,如 new String("").getClass() 。

Class.forName() 方法:传入类的全限定名加载类,如 Class.forName("java.util.Date") ,适合运行时动态加载类。

在项目中的应用场景

框架设计:像 Spring 框架,利用反射实现依赖注入,根据配置在运行时动态创建对象实例并注入依赖;还有动态代理实现 AOP 功能,如日志记录、事务管理等,通过反射在运行时创建代理类和对象,拦截并处理方法调用 。Hibernate 框架借助反射将数据库表映射到 Java 对象,实现 ORM 映射。

插件系统:开发插件式系统时,从配置文件或数据库读取插件类全名,用 Class.forName() 动态加载类,再创建实例并调用方法,实现插件功能的动态加载与使用,无需修改主程序代码即可扩展系统功能 。

单元测试:JUnit 等单元测试框架利用反射发现和调用标注了 @Test 注解的方法,自动执行测试,简化测试流程 。还能通过反射创建和配置测试对象,测试私有方法和字段。

序列化和反序列化:Jackson、Gson 等工具库在处理对象与 JSON、XML 等格式转换时,用反射读取对象属性值进行序列化,或根据数据格式利用反射创建对象并设置属性值完成反序列化 。

什么是java的反射机制,他在你的项目里面有哪些地方被应用到了的更多相关文章

  1. Java 类反射机制分析

    Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...

  2. java的反射机制

    一.java的反射机制浅谈 最近研究java研究得很给力,主要以看博文为学习方式.以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出.受到各位指教之处,如若让小生好好感动, ...

  3. Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别

    一.Java的反射机制   每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图:   其中

  4. java笔记--反射机制之基础总结与详解

    一.反射之实例化Class类的5种方式: java的数据类型可以分为两类,即引用类型和原始类型(即基本数据类型). 对于每种类型的对象,java虚拟机会实例化不可变的java.lang.Class对象 ...

  5. JAVA的反射机制学习笔记(二)

    上次写JAVA的反射机制学习笔记(一)的时候,还是7月22号,这些天就瞎忙活了.自己的步伐全然被打乱了~不能继续被动下去.得又一次找到自己的节奏. 4.获取类的Constructor 通过反射机制得到 ...

  6. java笔录---反射机制(1)

    引言   为了方便记忆java的反射机制,在这里仔细的总结了一下.主要是怕以后忘记了,这样也方便回忆.因为最近利用空余时间深入的了解spring和Mybatis框架,   像spring中核心模块IO ...

  7. Java高新技术 反射机制

     Java高新技术 反射机制 知识概要:                   (1)反射的基石 (2)反射 (3)Constructor类 (4)Field类 (5)Method类 (6)用反射方 ...

  8. java的反射机制浅谈(转)

    原文链接:java的反射机制浅谈 一.java的反射机制浅谈 1.何谓反射机制 根据网文,java中的反射机制可以如此定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性 ...

  9. 【转】Java利用反射机制访问私有化构造器

    Java利用反射机制访问私有化构造器 博客分类: java   我们都知道,当一个类的构造方法被设为私有的时候(private),在其他类中是无法用new来实例化一个对象的. 但是有一种方法可以把带有 ...

  10. 【转】java原理—反射机制

    一.什么是反射:反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言 ...

随机推荐

  1. 解决Git异常 Access denied your account has 2FA enabled

    摘要:解决Git双因子身份验证问题. 问题背景   在使用账号和密码的方式拉取公司GitLab代码时,遇到了以下错误提示问题: remote: HTTP Basic: Access denied. T ...

  2. Java 提取url的域名

      有时候,我们需要校验URL的域名是否在白名单中,故需要提取其中的域名.可以使用java标准类库java.net.URL进行提取,方法如下: import org.apache.commons.la ...

  3. MySQL Explain查看执行计划详解

    目录 前言 EXPLAIN 中的列 id 和select_type table type possible_keys key 和 key_len ref 和 rows Extra 小结 Referen ...

  4. 机器学习中的"食材挑选术":特征选择方法

    想象你要做一道美食,面对琳琅满目的食材,优秀的厨师不会把所有原料都扔进锅里,而是会选择最适合的几种. 在机器学习中,特征选择就是这个挑选过程,从原始数据中选择对预测目标最有用的特征(列),就像挑选优质 ...

  5. python之PypI打包whl文件

    一.简单介绍 python中我们经常会用到第三方的包作为工具,比如爬虫解析工具,网络请求工具等.之所以要把它封装成包,意识为了技术与业务分离,二是为了能多 项目多平台共用.python里面用到的第三方 ...

  6. Spring的一些常见面试题

    Spring八股文 源码解析 反射 1.谈谈spring ioc的理解,原理和实现? 总:两层意思:控制反转和容器. 控制反转:他是一种思想理论,原来的对象是由我们使用者自己来进行控制的,而有了spr ...

  7. AgenticSeek - 完全本地的AI助手替代方案

    English | 中文 | 繁體中文 | Français | 日本語 | Português (Brasil) 100%本地运行的Manus AI替代品,支持语音的AI助手,可自主浏览网页.编写代 ...

  8. 好消息!数栈FlinkX技术团队将FlinkX开源项目同步推送到Gitee啦!

    数栈是云原生-站式数据中台PaaS,我们在github上有一个有趣的开源项目:FlinkX FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,比如MySQL,HDFS等, ...

  9. 袋鼠云批流一体分布式同步引擎ChunJun(原FlinkX)的前世今生

    ​   一.前言 ChunJun(原FlinkX)是一个基于Flink提供易用.稳定.高效的批流统一的数据集成工具,是袋鼠云一站式大数据开发平台-数栈DTinsight的核心计算引擎,其技术架构基于实 ...

  10. 基于注解实现 SpringBoot 接口限流

    编写注解类 import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java. ...