采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
Java反射机制存在的必要性是什么,你给我详细讲一讲,并举例
也是我一直以来疑惑的问题。多年以后回答一下,仅供参考了。
从反射的定义去理解,也就是我们为什么需要在java程序在运行的过程中去感知和获取,关键是状态在运行中。
Java 在线debug,debug期间不停服。假设某些线上问题仅存在运行中的某个实例有问题,但其他实例没问题。可能是代码逻辑问题,也可能是这个实例的硬件环境问题,需要单独对这个实例排查。
1.6jdk可以加载外部的一个agent包的代码,来动态修改或增强 现有的代码逻辑。Instrumentation 就是在代理的过程中又jvm提供的。我们知道当时错误case的请求参数的话,就可以在不停止服务器的情况下重复执行这个请求,执行过程中通过代理去观察每一步执行情况。
以上说的是观察,并没有改变原先代码的逻辑。以下是我们需要动态修改运行时的代码逻辑的场景:
然后如果bug是代码原因,我们(存在理论上的方案,虽然一般上都是改了代码立马去灰度上线吧)通过代理去修改线上的代码,先解决这个问题。
java-agent
arthas的监控
反射有一个比较重要的作用就是实现ioc容器,对服务进行注入,一个比较典型的应用就是spring容器,里面的service层接口都是通过反射去获取配置创建对应的实例并注入。感兴趣你可以去了解一下spring的ioc原理。
Java的多态机制,如继承和接口,完全可以替代反射啊,Java为什么还提供了反射机制呢?Spring的控制反转功能完全可以用继承和接口实现吧,读取配置文件也不需要反射啊?
Spring的控制反转IOC可以用集成和接口实现?这个不现实吧?首先,你的Xml文件里面的配置信息怎么反解成类实例呢?不用反射的话。。你当然也可以用序列化和逆序列化,但是想想用户去做配置的时候,适应那套晦涩的语法是不是很困难?
登录后可查看更多问答,登录/注册
招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航
1.8k 27
2.7k 22
1.2k 15
1.4k 14
1.3k 14