java 反射api


前几天我在想-这是最重要的Java API。 哪种SE和EE API可以使大多数Java生态系统成为可能,而哪些API不能重新创建为第三方库。

正如您可能已经猜到标题一样,我认为它是Reflection API 。 是的,它不可避免地是每个项目的直接或间接的一部分。 但这对于许多其他API(尤其是Collection API)而言确实如此。 但是,Reflection API的重要之处在于,它启用了当今大多数流行的工具和框架-Spring,Hibernate和大量的Web框架。

其他大多数API都可以在JDK之外实现。 Collections API很可能是commons-collect或番石榴。 最好将它作为JDK的一部分,但没有它我们可以进行管理(它出现在Java 1.2中)。 但是反射API不能。 它几乎必须是语言的组成部分。

没有反思,您将无法拥有我们今天使用的任何精美工具。 不是ORM,不是依赖项注入框架,也不是大多数Web框架。 好吧,从技术上讲,您可能在某个时候有了主题– 使用SPI或仅使用java-config。 可能有人争辩说,如果不是为了反思,我们将跳过整个XML配置时代,而直接涉足基于代码的配置。 但是,依赖于所有这些框架中的反射的不仅仅是配置。 即使Spring可以在配置过程中实例化其bean并通过将它们转换为InitalizingBean初始化,您将如何处理自动连接的注入而无需进行反射(“手动”不算在内,因为它不是自动装配的)? 在Hibernate状态下,自省和Java bean API似乎足够了,但是当您深入研究时,它们还不够。 通常,不可能处理注释。

没有这些框架,Java就不会是今天的广泛技术。 如果我们没有庞大的开源生态系统,那么Java将会是相当小众的市场。 当然,这不是唯一的因素–语言设计者然后JVM实现者正确地做了很多事情。 但是,我认为反思是其中之一。

是的,使用反射感觉很麻烦。 在非框架代码中进行反射似乎是不得已的事情–仅在给定库未正确设计用于扩展的情况下才使用它,但您需要对其进行一些微调以适合您的情况。 但是,即使您的代码库中有零反射代码,您的项目也可能充满了它,没有它就不可能实现。

使用反射的需求可能被视为该语言的不足之一–您无法使用该语言所提供的功能做重要的事情,因此您诉诸了一种魔术API,该API可让您不受限制地访问否则(据说)经过精心设计的蜜蜂。 但是我想说,即使进行反思也是事实上的语言功能。 它可能是使Java如此流行和普及的关键因素。

翻译自: https://www.javacodegeeks.com/2019/06/reflection-is-the-most-important-java-api.html

java 反射api