2015-10-19 41 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代碼,稍後將其用作「普通代碼」。另外,很多框架在運行時使用註釋配置和字節代碼生成,所以基本上反射保持在最低限度。