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