jav*_*iut 2 java reflection java-8
我已阅读以下帖子
Oracle停止使用sun.reflect.Reflection.getCallerClass
我想知道这种变化究竟意味着什么.
1).意味着这个类sun.reflect.Reflection.getCallerClass会被重写以提供更多的安全性Java reflection吗?
2).意味着不再需要这门课程?也许另一种方法?
3).反思将在Java 8中结束.method.invoke将抛出UnsupportedOperationException.
4).这会影响与Spring或AspectJ面向方面编程相关的任何事情吗?
我很想知道因为我们使用Reflection method.invoke在发送到数据库之前为类提供了一些标志.如果反思是我可以用什么方法来提供我的行为,这就提出了另一个问题.我认为AOP是一种可行的方式.
非常感谢.
简短的回答:你只需要担心,如果你使用 sun.reflect.Reflection.getCallerClass.(并且建议Java反射被撤销是荒谬的.)
更长的答案是该方法提供的功能正在JEP 176中重新设计.旧方法实际上正在被删除......不仅仅是已弃用.它是sun.*树中的一个方法,应用程序代码不应该直接调用它.目前的计划似乎是:
如果无法识别有效的用例,则完全删除此功能,或者
提供替换API,或者至少推迟从Java 7中删除当前方法
此私有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面向方面编程相关的任何事情吗?
可能不是.如果它们依赖于那种特定方法,它只会影响这些技术.如果他们这样做,那么相应的库维护者将需要确保Java团队知道需要这样的用例.我想维护者正在跟踪这个.
| 归档时间: |
|
| 查看次数: |
4747 次 |
| 最近记录: |