2023-02-22  阅读(1)
原文作者:键盘林 原文地址:https://blog.csdn.net/qq_37909508/category_8976362.html

通过序列号来破坏单例模式

饿汉式为例

实现序列号接口

202302222100589461.png

我们可以看到我们通过序列化的方式创建出来了两个不同的对象,导致破坏了原本的单例模式

202302222101001242.png

解决办法,在HungrySingleton类中创建一个方法

202302222101036643.png

在运行一下

202302222101055484.png

我们可以知道这个方法肯定是重载方法

我们可以进入到ObjectInputStream这个类来查看

202302222101075005.png

202302222101098146.png

202302222101132247.png

202302222101155028.png

202302222101174669.png

2023022221012273110.png

2023022221012640611.png

当类被序列号和反序列化时候返回true

2023022221012962512.png

因此当前返回回来就会new一个instance

2023022221013167813.png

因此我们知道了序列号和反序列化返回的是一个新的对象

2023022221013465714.png

判断是否存在ReadResolve()方法

2023022221013723215.png

2023022221013922716.png

很明显该方法调用了我们写的readResolveMethod方法

2023022221014118017.png

上面调用的也就是下面这个方法

2023022221014374618.png

回到原来所以req拿到的是单例下的对象,虽然我们在看源码的时候发现,它内部有instance了一个对象,但是并没有返回,对于我们来说没啥用^_^

2023022221014551219.png


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文