如何理解java中的反射?

售前免费咨询热线: 4 0 0 - 1 8 6 - 0 9 0 5
汇智资讯Huizhi information

当前位置:首页 »如何理解java中的反射?

如何理解java中的反射?

日期:2020-08-13 14:28:58 访问量: 来源:

利用反射获取方法、调用方法什么的,这些我就不说了,随便一本书都有介绍,我相信 99% 的人都能理解它的用法。尽管每本书都在强调反射很有用,但它就不说有什么用,在这里我表达一下我的理解。

如何理解java中的反射

反射的概念

首先看一下 Oracle 官方对反射的解释:

Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructors to operate on their underlying counterparts, within security restrictions.

意思就是,反射使 Java 代码能够发现有关已加载类的字段、方法和构造函数,并能通过相应的方法操作它们。它赋予了 Java 代码在运行时创建和修改对象的能力,而无需重新编译,使应用程序执行本来不可能的操作。

反射的用途

反射常用于类库或框架的编写。显然,它们在编译时无法知道应用程序的结构,而有了反射,它们就可以针对已知接口编程,既解耦,又更具有动态性,因为反射可以动态实例化类并将其赋予它的某个接口。

典型的,比如 Web 容器,它不知道你的应用程序,哪些类实现了 Servlet,哪些类实现了 Filter,但它可以通过 web.xml 配置的 servlet-class 或 filter-class 使用反射进行实例化,然后再运行你实现 Servlet 接口的类。

整体来讲,反射的使用场景可分为 3 类:

实例化任意的类 - 比如,在依赖注入(Dependency Injection)的框架中,它凭借类的全限定类名,使用反射找到类的构造函数并实例化

动态代理 - 包装一个类,典型的是在一个类方法调用前或调用后插入一些逻辑

Marshalling/UnMarshalling - 类似序列化,比如通过 getter 或 setter 方法,将 JSON 或 XML 映射到一个对象时,代码不必知道字段或方法的名称,它只需检查类的信息

反射的缺点

虽然平时用的不多,但我们无不享受着它带来的好处。当然了,它也有缺点,不能随意使用,能免则免,缺点主要有:

性能开销 - 由于是动态解析类型,因此无法执行某些 JVM 优化,所以反射操作的性能稍慢,要避免频繁访问反射操作

安全限制 - 反射需要在一个没有安全限制的环境中运行,如果程序必须在有安全限制的上下文中运行(如 Applet),这就是个问题了

汇聚行业精英智慧

致力于高端IT技术人才培养

助力万千学员成就IT梦!

汇智动力

扫码关注 领取资料

www.hzdledu.cn

相关阅读Reading

全国热线:400-186-0905

总部热线:028-6547-1147

周一至周日9:30-24:00

我要咨询
汇智动力微信

汇智动力微信公众号

')