什么是java的反射机制,他在你的项目里面有哪些地方被应用到了
什么是 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的反射机制,他在你的项目里面有哪些地方被应用到了的更多相关文章
- Java 类反射机制分析
Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...
- java的反射机制
一.java的反射机制浅谈 最近研究java研究得很给力,主要以看博文为学习方式.以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出.受到各位指教之处,如若让小生好好感动, ...
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
一.Java的反射机制 每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图: 其中
- java笔记--反射机制之基础总结与详解
一.反射之实例化Class类的5种方式: java的数据类型可以分为两类,即引用类型和原始类型(即基本数据类型). 对于每种类型的对象,java虚拟机会实例化不可变的java.lang.Class对象 ...
- JAVA的反射机制学习笔记(二)
上次写JAVA的反射机制学习笔记(一)的时候,还是7月22号,这些天就瞎忙活了.自己的步伐全然被打乱了~不能继续被动下去.得又一次找到自己的节奏. 4.获取类的Constructor 通过反射机制得到 ...
- java笔录---反射机制(1)
引言 为了方便记忆java的反射机制,在这里仔细的总结了一下.主要是怕以后忘记了,这样也方便回忆.因为最近利用空余时间深入的了解spring和Mybatis框架, 像spring中核心模块IO ...
- Java高新技术 反射机制
Java高新技术 反射机制 知识概要: (1)反射的基石 (2)反射 (3)Constructor类 (4)Field类 (5)Method类 (6)用反射方 ...
- java的反射机制浅谈(转)
原文链接:java的反射机制浅谈 一.java的反射机制浅谈 1.何谓反射机制 根据网文,java中的反射机制可以如此定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性 ...
- 【转】Java利用反射机制访问私有化构造器
Java利用反射机制访问私有化构造器 博客分类: java 我们都知道,当一个类的构造方法被设为私有的时候(private),在其他类中是无法用new来实例化一个对象的. 但是有一种方法可以把带有 ...
- 【转】java原理—反射机制
一.什么是反射:反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言 ...
随机推荐
- Spring注解之@Bean 用法介绍
注解 @Bean是一个方法级别的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里.添加的bean的id为方法名. 定义Bean 下面摘录@Configur ...
- Ubuntu 通过 docker 启动 mysql
1.首先拉取MySQL的镜像 docker pull mysql 2.运行mysql容器 docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASS ...
- Gitee、Github上star星星数获取到一个图片里,用于MD文档
记录一下 Gitee 用这个链接当图片地址即可 https://gitee.com/用户名/仓库名/badge/star.svg?theme=white https://gitee.com/用户名/仓 ...
- Python字符串进化史:从青涩到成熟的蜕变
Python字符串进化史:从青涩到成熟的蜕变 Python 2.x 的字符串世界 在 Python 2.x 的时代,字符串处理已经是编程中的基础操作,但与现在相比,有着不少差异.在 Python 2. ...
- DRF之异常捕获源码分析
DRF之异常捕获源码分析 [一]异常捕获介绍 Django Rest Framework(DRF)是一个用于构建Web API的强大框架,它提供了一种处理异常的机制,使开发人员能够捕获和处理各种异常情 ...
- 电气设计软件有哪些?EPLAN让你成为专业工程师
作为一名电气设计师,掌握适合自己的设计软件至关重要.在本文中,我们将向您介绍五款广受欢迎的电气设计软件,无论您是初学者还是专业设计师,这些软件都能帮助您轻松完成各类电气设计任务.让我们一起来了解这些实 ...
- Golang基础笔记四之map
本文首发于公众号:Hunter后端 原文链接:Golang基础笔记四之map 这一篇笔记介绍 Golang 里 map 相关的内容,以下是本篇笔记目录: map 的概念及其声明与初始化 map 的增删 ...
- Java源码分析系列笔记-15.CompletableFuture
目录 1. 是什么 2. Future VS CompletableFutre 3. 使用 3.1. 运行一个不返回结果的任务 3.2. 运行一个返回结果的任务 3.3. 线程池 3.4. 手动完成任 ...
- 10.Java Spring框架源码分析-IOC-实例化所有非懒加载的单实例bean
目录 1. 要研究的代码 2. 实例化所有非懒加载的单实例bean 2.1. 获取所有BeanName,一个个创建 2.2. 创建单个bean 2.3. 看看之前创建bean有木有,没有再去创建[不是 ...
- 开发工具系列001-Git Tag
本文简单介绍 git 仓库中 tag 的用法. 如何为 git 仓库打上 tag 标记. git tag // 查看当前仓库的 tag 信息,如果当前没有版本则显示为空 git tag -l &quo ...