java反射——设计框架的灵魂

简介: java反射——设计框架的灵魂

一、什么是反射(机制)

反射实际是一个 ”正“ 和 ”反“ 的操作,所谓的 ”正“ 操作就是用已知的一个类去得到一个对象,继而使用这个对象的属性和方法;而 ”反“ 操作是当我们java文件编译之后形成class文件,每个class文件都是Class类的一个对象,这个对象也可称为文件对象,通过这个文件对象可以得到这个.java类。

二、反射的好处

可以在程序运行过程中,操作这些对象。如下,为什么可以查看到所有的方法列表,就是通过反射机制实现这个功能的,提前把str对象加载进内存,通过反射获取所有的方法封装成Method对象,然后将这些对象放到Method[]数组中展示出来

可以解耦,提高程序的可扩展性。

三、获取Class类对象的方式

如何得到Class类的一个实例化对象?有以下三种方式

第一种:通过Class类内部提供的forName()方法直接根据类的完成路径获取实例化对象

说明:Class.forName("全类名(包含包名)"),因为他是一个字符串可以加载到配置文件中,读取文件加载类。由于字符串支持拼接方便,所以这种方式使用较多!

 

第二种:通过类.class直接获取Class实例化对象

说明:类名.class:已经将字节码对象加载进内存了,通过类名的属性class获取多用于参数的传递

 

第三种:使用Object类提供的 public final Class<?> getClass()方法获取一个Class实例化对象

Object是所有类的父类,这样所有类的实例化对象可以直接利用getClass()得到Class类实例化对象

 

比较三个Class对象,结果都是true

System.out.println(personClass==personClass1);

System.out.println(personClass1==personClass2);

结论:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。

 

四、Class类的实例化对象具有的功能

 

反射的应用

1、写一个"框架",不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法

步骤:

  • 将需要创建的对象的全类名和需要执行的方法定义在配置文件中
  • 在程序中加载读取配置文件
  • 使用反射技术来加载类文件进内存
  • 创建对象
  • 执行方法

2、泛型擦除

如何向泛型是String的集合中添加Integer类型的数据,

执行如下代码,编译不通过,数据类型和存储的数据类型不同

List<String> list = new ArrayList<>();
list.add("a");
list.add(1);

伪泛型:编译后的class文件没有泛型的

 List<String> list = new ArrayList<>();
 list.add("a");
 //通过反射获取list的类的文件对象
  Class clazz = list.getClass();
 //获取list中的add方法
 Method method = clazz.getMethod("add",Object.class);
 //使用方法
  method.invoke(list,100);
  method.invoke(list,50);
   System.out.println(list);//[a, 100, 50]

 


相关文章
|
27天前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
27天前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
1月前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
135 3
|
23天前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
34 4
|
1月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
27天前
|
监控 Java
Java基础——反射
本文介绍了Java反射机制的基本概念和使用方法,包括`Class`类的使用、动态加载类、获取方法和成员变量信息、方法反射操作、以及通过反射了解集合泛型的本质。同时,文章还探讨了动态代理的概念及其应用,通过实例展示了如何利用动态代理实现面向切面编程(AOP),例如为方法执行添加性能监控。
|
1月前
|
开发框架 Java 关系型数据库
Java哪个框架适合开发API接口?
在快速发展的软件开发领域,API接口连接了不同的系统和服务。Java作为成熟的编程语言,其生态系统中出现了许多API开发框架。Magic-API因其独特优势和强大功能,成为Java开发者优选的API开发框架。本文将从核心优势、实际应用价值及未来展望等方面,深入探讨Magic-API为何值得选择。
43 2
|
1月前
|
前端开发 Java 数据库连接
你不可不知道的JAVA EE 框架有哪些?
本文介绍了框架的基本概念及其在编程领域的应用,强调了软件框架作为通用、可复用的软件环境的重要性。文章分析了早期Java EE开发中使用JSP+Servlet技术的弊端,包括可维护性差和代码重用性低等问题,并阐述了使用框架的优势,如提高开发效率、增强代码规范性和可维护性及提升软件性能。最后,文中详细描述了几种主流的Java EE框架,包括Spring、Spring MVC、MyBatis、Hibernate和Struts 2,这些框架通过提供强大的功能和支持,显著提升了Java EE应用的开发效率和稳定性。
60 1
|
1月前
|
Java
Java的反射
Java的反射。
28 2
|
1月前
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
47 0