简短的回答:您只需担心use sun.reflect.Reflection.getCallerClass
。 (并且建议 Java 反射被撤销是可笑的。)
更长的答案是,该方法提供的功能正在 JEP 176 中重新设计。旧方法实际上正在被删除......而不仅仅是弃用。它是一个方法中的sun.*
树,应用程序代码不应直接调用它。目前的计划似乎是:
这个私有 API 最初的主要用例是供安全管理员等需要知道谁调用了他们的人使用。不幸的是,这种方法已被证明是脆弱的。已经设计了解决该问题的新方法(使用消息句柄)。他们决定强制解决这个问题,而不是让应用程序代码随意使用此 API 来达到可疑目的。
然而,这个问题有被抵制的迹象,因为它导致了 Groovy 和 JRuby 等产品的损坏。
参考:
- 此消息线程:http://www.mail-archive.com/[电子邮件受保护]/msg05325.html http://www.mail-archive.com/mlvm-dev@openjdk.java.net/msg05325.html
您的具体问题:
1)。是否意味着该类 sun.reflect.Reflection.getCallerClass 将被重写以在 Java 反射中提供更多安全性?
往上看。我怀疑这样做有与安全相关的动机。
UPDATE- 这证实了这一点:https://partners.immunityinc.com/idocs/Java%20MBeanInstantiator.findClass%200day%20Analysis.pdf https://partners.immunityinc.com/idocs/Java%20MBeanInstantiator.findClass%200day%20Analysis.pdf
2)。意味着不再需要这个课程了吗?也许另一种方法?
往上看。他们尚未确定是否需要该功能。
3)。 Java 8中反射将结束。method.invoke将抛出UnsupportedOperationException。?
这两个都不是。这只是关于特定类的特定方法sun.*
包。
它不会影响一般的反射或method.invoke()
.
4).这会影响与 Spring 或 AspectJ 面向方面编程相关的任何内容吗?
可能不会。只有当这些技术依赖于该特定方法时,它才会受到影响。如果他们这样做,那么各自的库维护者将需要确保 Java 团队了解需要这样做的用例。我想维护人员正在跟踪这一点。