2015-10-19 48 views
-2

在Java中使用反射非常昂贵,因为它影响性能非常糟糕。但我不知道,反射广泛用于容器配置(web.xml),框架的工作原理类似于Structs,REST ..和像休眠等ORM 它是如何被证明是正确的?它是因为反射只使用一次当容器启动或其他原因背后呢?反射与容器配置

+0

这是有道理的,因为在这些框架中没有其他替代方案。 – JonK

+1

我想这也会回答你的一些音乐会:http://programmers.stackexchange.com/a/123959 –

+0

*“因为它影响性能非常糟糕”* - 不正确。曾经有一段时间Java中的反射非常缓慢,但现在不然。 –

回答

0
  • 没有其他的方式让他们做他们做的事(一个很好的例子可能是Spring框架 - 它不会强制你在使用依赖注入时使用任何接口,并且因为它没有接口用,不知道你的类在编译的时候,唯一的办法就是通过反射来检查它们)
  • 反射重部件不(应该)被过于频繁地
  • 反射执行不如果执行得当,代价非常昂贵(例如,如果您只查找一次想要调用的方法,然后缓存找到的对象java.lang.reflect.Method并在进一步的调用中使用它s)
0

首先,我不会说使用反射对代码的性能有这样的不利影响。当然,这是一个开销,但是有一些优化技术可以确保将性能影响降到最低。就性能和可用性之间的权衡而言,应考虑产品作为开发者的具体要求。例如,我会在移动设备上使用一个沉重的基于反射的框架 - 我想不是。它在后端是否有意义 - 我会说是。

其次,基于注释的配置并不总是意味着在应用程序运行时使用反射。有一些框架利用AnnotationProcessor框架并在编译期间生成Java代码,稍后将其用作“普通代码”。另外,很多框架在运行时使用注释配置和字节代码生成,所以基本上反射保持在最低限度。