![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
simplefanC
这个作者很懒,什么都没留下…
展开
-
序列化和反序列化对单例的破坏
测试序列化和反序列化对单例的破坏(以饿汉式为例)破坏的原因解析:反序列化的时候通过反射newInstance 重新生成了一个类 所有和原有的类不是同一个解决办法:在单例类中重写一个方法:readResolve 返回单例类 底层代码在执行的过程中虽然还会通过反射重新创建单例,但是最终会调用这个方法,从而返回原始的单例public class HungarySingleton implements Serializable{ private static final HungarySi.原创 2020-12-08 16:34:51 · 249 阅读 · 0 评论 -
单例模式 反射攻击解决方案
对于在类加载时创建单例对象 1.静态内部类单例 2.饿汉式单例 在私有构造器内部加判断即可抵御反射攻击(下面以饿汉式单例为例)public class HungarySingleton { private static final HungarySingleton hungarySingleton; static { hungarySingleton = new HungarySingleton(); } private HungarySing.原创 2020-12-08 18:05:44 · 569 阅读 · 1 评论 -
克隆对单例的破坏
解决办法:1,不实现Cloneable接口 2,对clone方法进行修改public class HungarySingleton implements Cloneable { private static final HungarySingleton hungarySingleton; static { hungarySingleton = new HungarySingleton(); } private HungarySingleton()原创 2020-12-08 19:19:42 · 649 阅读 · 1 评论