请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Java反射机制存在的必要性是什么,你给我详细讲一讲,并举例

Java反射机制存在的必要性是什么,你给我详细讲一讲,并举例

正在回答 回答被采纳积分+3

2回答

Hankong 2022-10-23 23:55:29

也是我一直以来疑惑的问题。多年以后回答一下,仅供参考了。

从反射的定义去理解,也就是我们为什么需要在java程序在运行的过程中去感知和获取,关键是状态在运行中。

Java 在线debug,debug期间不停服。假设某些线上问题仅存在运行中的某个实例有问题,但其他实例没问题。可能是代码逻辑问题,也可能是这个实例的硬件环境问题,需要单独对这个实例排查。

1.6jdk可以加载外部的一个agent包的代码,来动态修改或增强 现有的代码逻辑。Instrumentation 就是在代理的过程中又jvm提供的。我们知道当时错误case的请求参数的话,就可以在不停止服务器的情况下重复执行这个请求,执行过程中通过代理去观察每一步执行情况。

以上说的是观察,并没有改变原先代码的逻辑。以下是我们需要动态修改运行时的代码逻辑的场景:

然后如果bug是代码原因,我们(存在理论上的方案,虽然一般上都是改了代码立马去灰度上线吧)通过代理去修改线上的代码,先解决这个问题。

java-agent

arthas的监控

0 回复 有任何疑惑可以回复我~
翔仔 2020-09-16 23:35:47

反射有一个比较重要的作用就是实现ioc容器,对服务进行注入,一个比较典型的应用就是spring容器,里面的service层接口都是通过反射去获取配置创建对应的实例并注入。感兴趣你可以去了解一下spring的ioc原理。

0 回复 有任何疑惑可以回复我~
  • Java的多态机制,如继承和接口,完全可以替代反射啊,Java为什么还提供了反射机制呢?Spring的控制反转功能完全可以用继承和接口实现吧,读取配置文件也不需要反射啊?
    回复 有任何疑惑可以回复我~ 2020-09-17 17:38:48
  • 翔仔 回复 提问者 qq_大雨还在下_03432217 #2
    Spring的控制反转IOC可以用集成和接口实现?这个不现实吧?首先,你的Xml文件里面的配置信息怎么反解成类实例呢?不用反射的话。。你当然也可以用序列化和逆序列化,但是想想用户去做配置的时候,适应那套晦涩的语法是不是很困难?
    回复 有任何疑惑可以回复我~ 2020-09-18 00:59:17
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信