【问题标题】:Understanding Java reflection drawbacks了解 Java 反射的缺点
【发布时间】:2014-04-03 16:15:08
【问题描述】:

我试图了解Java docs中提到的缺点

安全限制

反射需要运行时权限,当 在安全管理器下运行。

反射需要哪些运行时权限?在这种情况下,安全管理器是什么?这个缺点是否仅适用于 Applet?

内部结构暴露

由于反射允许代码执行本来可以 在非反射代码中是非法的,例如访问私有字段和 方法,使用反射会导致意想不到的副作用, 这可能会使代码功能失调并可能破坏可移植性。 反射代码破坏了抽象,因此可能会改变行为 随着平台的升级。

反射如何打破抽象?以及它对平台升级有何影响。

请帮助我澄清这些。非常感谢。

【问题讨论】:

  • 使用反射,您可以使private 字段/方法变为public。但是,不知道SecurityManager 会如何影响...
  • stackoverflow.com/questions/3002904/… 的副本? (网络搜索“java 反射安全”首先发现了这一点,以及许多其他讨论。)
  • @keshlam 虽然这解释了反思的风险,但没有提到SecurityManager 可以采取哪些措施来防止部分/大部分风险
  • @keshlam,感谢您提供链接。能否请您澄清我的第二个与内部暴露相关的问题。

标签: java reflection


【解决方案1】:

首先,您应该始终问自己为什么要在代码中进行反射。你不能在没有反射的情况下进行操作。如果是,那么只有你应该使用反射。反射使用关于类、变量和方法的元信息,这会增加开销、性能问题和安全威胁。

要详细了解反射的缺点,请访问http://modernpathshala.com/Forum/Thread/Interview/310/what-are-the-drawbacks-of-reflection

【讨论】:

  • 请不要在答案中使用缩短的网址。他们没有告诉我任何关于我将要访问的网站的信息。
【解决方案2】:

安全“沙盒”不仅限于小程序。许多其他允许不完全受信任的“插件”代码的环境——网络服务器、IDE 等等——限制了插件可以做些什么来保护自己免受插件中的错误(而不是提及故意恶意代码)。

【讨论】:

    【解决方案3】:

    一个叫做依赖容器的框架类被用来分析一个类的依赖关系。通过这种分析,它能够创建类的实例并通过 Java 反射 将对象注入到定义的依赖项中。这消除了硬依赖。这样就可以单独测试该类,例如。通过使用模拟对象。这是匕首 1。

    这个过程的主要缺点有两个方面。首先,Reflection 自身变慢,其次,它曾经在运行时执行依赖关系解析,导致意外崩溃

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 2010-10-17
      相关资源
      最近更新 更多