我们可以通过Java反射API访问私有变量。那么,有访问修饰符还有什么用呢?同时,帮助我更好地理解在实际应用中访问修饰符(private、public等)的真正用途。
通过反射访问“私有”字段的功能将不会得到长时间支持,最终它将消失。在大多数最新的Java版本中,当您尝试以反射方式(如private
和protected
)访问内容时,您已经会收到警告。在未来的版本中,这可能会完全消失。通过项目jigsaw
,每个版本中的JVM
变得越来越封装和受限。
而且,在java
中的新API,例如MethodHandles
,可以通过privateLookupIn
创建/访问private
成员,如果您不在适当的范围内,则会失败。简单地说 - 您可以访问某些代码的私有成员,例如允许/公开此类访问的module
,但不是在任何地方。从某种意义上说,这是一个比reflection
更为严格的API。因此,通过精心制作的新API来阻止此类用法正在进行中。
Spring
就不需要那些信息。它只需要 public
class
数据(例如公共方法、注释等)。