首页 > 编程语言 >java的反射到底是有什么用处?怎么用?

java的反射到底是有什么用处?怎么用?

时间:2023-08-25 14:06:26浏览次数:36  
标签:反射 set Java 对象 spring 类型 java 用处

首先,明白静态语言与动态语言的区别

Java是一门静态语言,但是反射提供了一种黑魔法,允许在运行时去动态修改一个类的定义,一个对象的属性等等,给静态语言加上了“动态”的效果

Java反射可以简单的理解为Class的一种抽象,我们知道,Java是面向对象语言,一切皆对象,都是某种抽象,可以理解反射就是对Class的抽象,所以,通过反射,你可以获取类名,注解,属性,构造器,gettter/setter等等,动态调用方法,修改属性,修改属性的访问权限等等

Java反射的应用很多,如,JSON的序列化/反序列化,JDK动态代理,AOP等等

这样会让java在编写的时候不容易出错,但也会对一些东西形成阻碍,尤其是一些相互之间没有关系的那种,例如,我想通过一个静态方法,把类型A的对象a,他的一些字段复制给类型B的对象b的同名同类型字段上面,而A和B没有关系,他们可以是任何类。

你看,这样的话我们无法直接通过A和B的get和set方法来读写这些字段吧?因为A和B没有任何关系,他们在这个方法的参数中,只能是Object类型,而对一个未知类型的对象进行操作,反射就是必不可少的了。

对未知类型的对象或仅仅知道该对象实现的接口,抽象类的而不知道具体类型的时候 我们可以使用反射完成对他的操作。

上面这个例子就是BeanUtils里面的一个方法:copyProperties,它能够将一个对象的内容复制到另一个对象里面。

那么像这种通用的方法,不局限于某一个类或者某一个对象,很大几率都是通过反射做到的。

除此之外,反射还有更加广泛的用途。

在java中,能够控制应用的一部分,或者整体的启动和关闭,需要你编程来配合它的工作,那么这种类库应该被称作框架,一个很著名的框架是spring,spring可以自己根据你的配置自动的创建各种类的对象,能够自动调用他们的set方法,甚至不通过set方法来设置字段的值,而这都是通过反射做到的,因此你可以在spring中使用任何类和对象,只要配置正确,它都能被spring纳入管理范围。


WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。

java的反射到底是有什么用处?怎么用?_Java

java的反射到底是有什么用处?怎么用?_字段_02

java的反射到底是有什么用处?怎么用?_spring_03

标签:反射,set,Java,对象,spring,类型,java,用处
From: https://blog.51cto.com/u_16125770/7230036

相关文章

  • Java反射是什么?
    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类;在运行时构造......
  • java线程池
    Executors创建线程的4种方法//1.newSingleThreadExecutor创建“单线程化线程池”//特点://单线程化的线程池中的任务是按照提交的次序顺序执行的。//只有一个线程的线程池。//池中的唯一线程的存活时间是无限的。//......
  • java.lang.NoClassDefFoundError问题解决方案
    骑士李四记录:场景在pom.xml中引入一个包,之后启动部署项目,出现java.lang.NoClassDefFoundError的问题。报错信息:解决方案:加入这段代码<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executi......
  • java中 while循环和 do while循环的区别| while与do while的区别
    1、while循环:表示如果条件满足,程序一直循环执行,直到条件不满足为止。所以while循环的条件一般通过变量来进行控制,在循环体内对变量值做相应改变,以便在适当的时候退出,避免陷入死循环。inti=1;while(i<5){//业务逻辑if(i%2>0){System.out.print(“i是偶数”)}else{Sys......
  • 基于java的教学辅助平台
    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了教学辅助平台的开发全过程。通过分析教学辅助平台管理的不足,创建了一个计算机管理教学辅助平台的方案。文章介绍了教学辅助平台的系统分析部分,包括可行性分析等,系统设计部分主要介绍了......
  • 解放双手!ChatGPT助力编写JAVA框架! | 京东云技术团队
    亲爱的Javaer们,在平时编码的过程中,你是否曾想过编写一个Java框架去为开发提效?但是要么编写框架时感觉无从下手,不知道从哪开始。要么有思路了后对某个功能实现的技术细节不了解,空有想法而无法实现。如果你遇到了这些问题,看完这篇文章你也能用ChatGPT编写一个简单的JAVA框架。构思清......
  • 【Java复杂系统实战经验-2023-08月】Java基础,Path路径计算编码
    Java程序设计-个人月报-2023-08月背景在本月,给负责的项目做了一次文件存储的迁移工作。历史原因,开发阶段由于图简便,使用了本地文件存储。后面经过容器化上云,导致应用出现上传文件分发的多节点的问题。本项工作的经验,受益于Java基础Path的一些API,颇有收获。复杂的系统应当构......
  • java内存管理 美好的期望与现实的残酷
    美好的期望---看山是山,看水是水犹记得当年刚入门学Java课时;99%的java基础性书籍和带领入门的老师都会介绍java的一项优点;即:Java语言不使用指针,它加入了垃圾回收机制,解决了程序员需要管理内存的问题,使编程变得更加简单。刚开始接触这段话时,心理感觉java语言太优秀了,尤其是在大一学......
  • php反射机制
    PHP5添加了一项新的功能:Reflection,这个功能使得phper可以reverse-engineerclass,interface,function,methodandextension,通过php代码,就可以得到某object的所有信息,并且可以和它交互。反射是什么?它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等......
  • 基于java极速WEB+ORM 框架:jfinal2.0开发的通用后台管理系统及源码
    final2-common-admin1、基于java极速web开发框架:jfinal2.0开发的通用后台管理系统,包括完整的登录、注册、菜谱管理、厨师管理、餐厅管理等功能2、开发时是基于jdk1.8、tomcat7.0,utf8编码3、运行时请修改配置文件:a_little_config.txt及相应的运行环境:JavaBuildPath、TargetedR......