「反射破坏java」反射破坏私有

博主:adminadmin 2023-01-06 18:45:07 887

今天给各位分享反射破坏java的知识,其中也会对反射破坏私有进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java反射机制可以调用到私有方法,是不是就破坏了JAVA的卦装性呢。

这是一个很值得探讨的问题,许多人接触反射时,对反射功能之强大都会抱有怀疑,感觉严重破坏了封装的性质。可是,什么是封装,什么是安全呢?

封装,是将具体的实现细节隐藏,而把功能作为整体提供给类的外部使用,也就是说,公有方法能够完成类所具有的功能。当别人使用这个类时,如果通过反射直接调用私有方法,可能根本实现不了类的功能,甚至可能会出错,因此通过反射调用私有方法可以说是没有任何用处的,开发人员没有必要故意去破坏封装好的类。从这点上看,封装性并没有被破坏。

所谓安全,如果意思是保护实现源码不被别人看见,那没有作用。不用反射也能轻易获取源码。

所以我以为反射机制只是提供了一种强大的功能,使得开发者能在封装之外,按照特定的需要实现一些功能。就好比核技术,虽然造核弹很危险吧,但造核电站还是很有用处的(这个比喻似乎不是很恰当,将就将就)。

曾经给朋友讨论过这个问题,感觉解释得不是很清楚,大家一起探讨探讨,看看怎样表述才能更容易理解:)

反射的破坏性

参考:

基于单例模式,有很多实现方法,如:饿汉,懒汉。但是大多只会考虑到单实例和线程安全的问题,很少会考虑到反射对其的破坏。

由于反射这种Bug一样的存在,可以在系统任意地方实例化出一个对象。

反射可以直接调用构造函数,哪怕是私有的。

参考:

序列化破坏就三个步骤:

1.获得单例对象

2.对象写进文件

3.文件流反序列化为对象(实际上利用了字节码Class)

1我们阻止不了,2我们也阻止不了,只能寄希望于3。

目前来讲,从单例可靠性来说,比较好的方法是:

大家一致会以为,private是私有不允许访问的,但是在反射看来都不是事。

上述的话未经过验证,但是哪怕是有设置,依然可以通过启动java的参数去做更改,如:java -jar xxx.jar -Dspring.server.port:8888。只要是参数,都没有命令行的级别高,因此只要有人有权限,根本没办法从根本上防止反射调用私有方法。

说了那么多防止!防止!防止!

其实为什么要防止,安全性?

同为开发,真要破坏根本防不了,还需要那么曲折吗?

实际上的安全性,指的是对外,比如hash攻击,密钥被破解这些。

反射的创建不是让你去各种各样的防止这个那个。

更多的是提供了一种可能:

反射技术是不是破坏了java的封装性

没有,纯属误解

封装是静态的,反射是动态的

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

java反射机是否制扩大了访问范围,破坏了安全性?

你说的是对的,反射机制可以访问和修改私有成员,也可以调用私有方法。

反射破坏java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于反射破坏私有、反射破坏java的信息别忘了在本站进行查找喔。