首页 > 其他分享 >反射相关知识

反射相关知识

时间:2024-12-28 18:27:06浏览次数:6  
标签:反射 Java Spring 知识 class 获取 相关 Class

一、什么是

首先我们要知道反射是干啥的,反射是获取一个运行时状态,为什么我们要获取运行时状态呢?我们要获取运行时状态获取对象,创建对象后用其构造方法,成员方法。

其次,在反射中,我们常用到的方法Class.forname方法获取class对象,通过getConstructor,getFiled,getMethod获取对象的构造方法,成员方法,成员变量。

最后,通过反射,我们可以更好看别人的代码和底层代码。

二、核心类

  • Class类:表示正在运行的Java应用程序中类或接口。
  • Method类:表示类的方法对象。可以通过反射调用一个类的具体方法。
  • Field类:表示成员变量。通过反射,可以获取类的属性,并对属性进行读写操作。
  • Constructor类:表示类的构造方法。通过反射,可以调用一个类的构造方法,实例化该类。

 三、用途

  • 动态加载类:在运行时加载类,不需要在编译时确定。
  • 访问类的成员:在运行时访问类的字段、方法、构造器。
  • 调用方法:在运行时调用对象的方法。
  • 创建实例:在运行时创建类的实例。

四、获取Class对象方式

  • Class class = MyClass.class;
  • Class class = myObject.getClass();
  • Class class = Class.forName();

五、访问类的成员的常用方法

  • 获取构造器 
Constructor<?> constructor = class.getConstructor(String.class); 
Object obj = constructor.newInstance("Hello"); 
  •  获取字段
Field field = class.getDeclaredField("name"); 
field.setAccessible(true); 
field.set(obj,  "World");
  •  获取方法
Method method = class.getMethod("sayHello"); 
method.invoke(obj); 

 六、优缺点

1.优点

  • 降低耦合性
  • 简化代码
  • 支持框架和插件开发

2.缺点

  • 可读性降低
  • 增加开销,降低性能
  • 破坏封装性

七、 应用场景

1.框架开发

(1)依赖注入

  • Spring框架:Spring 使用反射来实现依赖注入。通过反射,Spring 可以在运行时动态地创建和管理 Bean,并将依赖项注入到这些 Bean 中。

(2)对象关系映射

  • MyBatis:Mybatis使用反射来动态地构建 SQL 语句,并将结果映射到 Java 对象。

2.动态代理

  • Spring AOP:Spring AOP 使用动态代理来实现切面编程。通过反射,可以在不修改原有代码的情况下,添加横切关注点(如日志记录、事务管理等)。

3.测试框架

  • JUnit 使用反射来发现和运行测试方法。通过反射,JUnit 可以自动检测带有 @Test 注解的方法,并执行这些方法。

4.序列化和反序列化

(1)JSON库

  • Gson:Gson 使用反射来将 Java 对象转换为 JSON 字符串,以及将 JSON 字符串转换为 Java 对象。

(2) XML库

  • JAXB:JAXB 使用反射来将 Java 对象转换为 XML 文档,以及将 XML 文档转换为 Java 对象。

5.动态配置

  • Spring Boot:Spring Boot 使用反射来解析配置文件(如 application.properties 或 application.yml ),并将配置值注入到 Bean 中。

6.类加载器

  • 自定义类加载器:通过反射,可以实现自定义类加载器,动态加载类。

标签:反射,Java,Spring,知识,class,获取,相关,Class
From: https://blog.csdn.net/m0_73757039/article/details/144791055

相关文章

  • 工业相机镜头选型知识详解
    工业相机在机器视觉、自动化生产和检测等领域扮演着重要角色,而镜头作为工业相机的关键组件,其选型直接影响到成像效果和系统的整体性能。在本篇博客中,我们将详细讲解工业相机镜头选型的相关知识,帮助您在实际应用中选择最合适的镜头。工业相机镜头的基本概念工业相机镜头是光学......
  • Java难绷知识01——IO流的对象流
    Java难绷知识01之对象流本篇文章会探讨一些JavaIO流中比较容易被忽视的对象流,而且会相对的探讨其中的一些细节其中对于对象流的操作讲解会少一些,主要讨论的是一些细节在JavaIO流中,对象流(ObjectInputStream对象输入流和ObjectOutputStream对象输出流)用于将对象进行序列化和......
  • Rust和C/C++相关调用总结
    一.Windows下Rust与C/C++互相调用1.C/C++调用rust1.1动态库调用1.1.1以LoadLibrary方式显示调用add.rs#[no_mangle]//防止Rust修改函数名pubextern"C"fnhello_world(){println!("HellofromRust!");}#[no_mangle]pubextern"C"fnadd(a:i32,b:i3......
  • 『联合省选2025集训』『图的连通性进阶』 知识点 总结
    前言若有长风绕旗,那便是我在想你了。这周讲了个图论连通性板块的一些进阶知识,周六全国第一给我们讲了一些树上的问题,感觉树剖板块实现难度较大,后面几道偏思维的题会有些许好转。这里就先写写连通性相关的进阶的一些知识点吧。主要涵盖:耳分解,双极定向,三连通分量和一些重要的......
  • Flutter 基础知识总结
    1、Flutter介绍与环境安装为什么选择Dart:基于JIT快速开发周期:Flutter在开发阶段采用JIT模式,避免每次改动都进行编译,极大的节省了开发时间基于AOT发布包:Flutter在发布时可以通过AOT生成高效的ARM代码以保证应用性能UI帧率可达120FPS:为了快速流畅的用户体......
  • SFLS 初一第一学期12.5&12.6 难点重点知识点易错点整理
    \(12.5\)用数轴上的点表示实数实数与数轴上的点之间的关系首先,我们提出一个问题:怎么用数轴上的点表示所有实数?对于这个问题,我们先将实数分为有理数部分和无理数部分。有理数部分我们知道,有理数可以用\(\frac{p}{q}\)表示,其中\(p,q\inZ,q\ne0,(p,q)=1\)。那么有理数可......
  • 《大语言模型》:人工智能时代的知识盛宴,大模型中文书籍震撼发售!
    你是否读过大语言模型综述文章_ASurveyofLargeLanguageModels_?这是学术界首篇系统介绍大语言模型技术的综述性文章,成为了很多人入门大模型的必读论文,目前引用次数已经突破3700次,获得了学术界的广泛关注。其中绘制的模型演进图、技术统计表被广泛传播、使用。为了进一......
  • 软考~系统规划与管理师考试——真题篇——2023年上半年——综合知识——纯享题目版
    文章目录真题(2023-上-01)真题(2023-上-02)真题(2023-上-03)真题(2023-上-04)真题(2023-上-05)真题(2023-上-06)真题(2023-上-07)真题(2023-上-08)真题(2023-上-09)真题(2023-上-10)真题(2023-上-11)真题(2023-上-12)真题(2023-上-13)真题(2023-上-14)真题(2023-上-15)真题(2023-上-16)真题(2023-上-17)真题......
  • Android编译相关文章收集
    前言全局说明一、说明1.1环境:Android二、系列文章2.1深入浅出Androidmakefile(1)--初探https://www.iteye.com/blog/nfer-zhuang-1752368(2)--LOCAL_PATHhttps://www.iteye.com/blog/nfer-zhuang-1752387(3)--LOCAL_SRC_FILEShttps://www.iteye.com/blog/nfer-z......
  • lpksetup.exe与 语言包安装 和 本地化设置 相关,主要用于帮助用户添加或删除 Windows
    lpksetup.exe是Windows操作系统中的一个可执行文件,位于C:\Windows\System32目录下。它与语言包安装和本地化设置相关,主要用于帮助用户添加或删除Windows操作系统的语言包。以下是对lpksetup.exe的详细介绍:1. 功能lpksetup.exe主要用于管理Windows操作系统的语......