设计模式系列—单例设计模式( 四 )
运行后的结果为:可见 , 两者的结果并不是一个对象 , 则饿汉模式依然受到了反射的攻击 。
文章插图
那么该如何解决这反射攻击呢?我们知道是在类加载的时候就加载了这个实例的 , 因为是在类加载的时候就生成了词实例 , 那么我们可以在构造器里面加一个判断 , 进行反射防御 。 代码如下:
文章插图
测试结果为:
文章插图
这种方式有一个特点 , 也就是它对类加载这个时刻就把对象创建好的这种类是ok的 , 静态内部类的单例也可以用 。 对于不是静态类的也需要解决下 , 要根据创建实例的顺序进行解决 。 但是无论如何反射都可以访问到类的方法和变量 , 进行修改 , 所以非类加载这个时刻就把对象创建好的这种类 , 是不能防止反射攻击的 。
源码中的应用//JDK --tt-darkmode-color: #1A74FF;">
文章持续更新 , 可以公众号搜一搜「 一角钱技术 」第一时间阅读 。 本文 GitHub org_hejianhui/JavaStudy 已经收录 , 欢迎 Star 。
推荐阅读
- 三星新旗舰Galaxy S21系列发布倒计时3天
- 改变网络化办公 揭秘夏普新复合机系列
- 网络双面提速办公 夏普发布全新复印机系列
- 电脑报2020年度获奖产品:引领智能商务无线投影时代的明基E系列商务投影机
- 手机必须双扬声器 魅族17系列告诉你这不是噱头
- 三星S21系列再次3C认证 充电器或成为“可选”配件
- 三星竟为Galaxy S21系列提供900多种颜色配置
- 摩托罗拉发布2021款Moto G系列产品 内建大容量电池169美元起价
- 影像旗舰vivo X60系列正式开售 斩获多个线上平台双冠军
- 对标AirPods系列 JBL推出2021新款无线耳机阵容