反射的方式破解单例模式

上篇文章中前两种单例实现方式可以通过反射来进行破解

package com.zkn.newlearn.test.gof;

import static org.junit.Assert.*;

import java.lang.reflect.Constructor;

import org.junit.Test;

import com.zkn.newlearn.gof.singleton.SingletonTest01;
import com.zkn.newlearn.gof.singleton.SingletonTest02;
import com.zkn.newlearn.gof.singleton.SingletonTest05;

public class TestSingleton01 {
	/**
	 * 破解单例
	 * @throws ClassNotFoundException
	 * @throws NoSuchMethodException
	 * @throws SecurityException
	 */
	@Test
	public void testTest2() throws Exception {

		Class clazz = Class.forName("com.zkn.newlearn.gof.singleton.SingletonTest02");
		Constructor con = clazz.getDeclaredConstructor(null); //无参构造函数
		con.setAccessible(true);// 设置private权限修饰符为可见
		SingletonTest02 sin1 = (SingletonTest02) con.newInstance();
		SingletonTest02 sin2 = (SingletonTest02) con.newInstance();
		System.out.println(sin1 = sin2); //false
		System.out.println(sin1);
		System.out.println(sin2);
	}

}

 

时间: 2024-08-02 01:33:04

反射的方式破解单例模式的相关文章

四中方式实现单例模式

一:饿汉式单例模式 package com.zkn.newlearn.gof.singleton; /** * * 饿汉式单例模式 * @author zkn * */ public class SingletonTest01{ /** * 加载类时,立即加载对象,是没有延迟的.是天然的线程安全的 */ private static SingletonTest01 singleton = new SingletonTest01(); /** * 构造器私有化 */ private Singlet

myeclipse生成注册码,破解,不用下载任何文件,代码方式破解

转载自百度经验 我破解的是  myeclipse 2015 , 破解方式,只有下面的代码,复制下面的代码,建一个程序运行,然后输入用户名,就会生成破解码了. package com; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class MyEclipseGen { private static final String LL = "Dec

通过反射的方式解析R文件

在android里通过xml布局文件寻找某个控件时,我们通常做法是通过R文件来指向 如: findById(R,id.xx); 但其实还有另外一种方法来获取控件 >>反射 如 : name : id的命名 findById(context.getResource().getIdentifier(name,"id",context.getPackageName)); 如此类推: 获取string类型 name : string的命名 findById(context.getR

as3单例模式的两种实现方式

式一:直接在构造函数里赋_instance值 package { public class MyClass { private static var _instance:MyClass; public function MyClass() { _instance = this; } public static function getInstance():MyClass { return _instance; } } } 方式二:常用的在getInstance()里根据需要才给_instance

《Android 源码设计模式解析与实战》——第2章,第2.6节单例模式的其他实现方式

2.6 单例模式的其他实现方式 2.6.1 懒汉模式 懒汉模式是声明一个静态对象,并且在用户第一次调用getInstance时进行初始化,而上述的饿汉模式(CEO类)是在声明静态对象时就已经初始化.懒汉单例模式实现如下. public class Singleton { private static Singleton instance; private Singleton () {} public static synchronized Singleton getInstance() { if

如何防止单例模式被JAVA反射攻击

    单例模式相信大家都知道,用过的人不在少数.之前写过一篇博文<singleton模式四种线程安全的实现>(参见:http://blog.csdn.net/u013256816/article/details/50427061),讲诉了单例模式的四种写法,并指出占位符模式的写法比较ok,详见如下: package com.effective.singleton; public class Elvis { private static boolean flag = false; privat

Android破解微信获取聊天记录和通讯录信息(静态方式)_Android

一.猜想数据存放路径 微信现在是老少皆宜,大街小巷都在使用,已经替代了传统的短信聊天方式了,只要涉及到聊天就肯定有隐私消息,那么本文就来讲解如何获取微信的聊天记录以及通讯录信息. 首先我们在没有网络的时候,打开微信同样可以查看聊天记录,说明微信会把聊天记录保存到本地,那么这么多信息肯定会保存在数据库中,所以我们可以去查看微信的databases目录看看内容: 可惜的是,我们在这个里面并没有发现一些有用的数据,所以这时候就了解到了微信因为把重要信息的数据库存在其他目录下面,我们可以直接把微信的整个

Java单例模式实现的几种方式_java

Java单例模式实现的几种方式 单例模式好多书上都是这么写的: public class SingleTon1 { private SingleTon1(){ } private static SingleTon1 instance = null; public static SingleTon1 getInstance(){ if(instance == null){ instance = new SingleTon1(); } return instance; } } 但是实际开发中是不会这

Android破解微信获取聊天记录和通讯录信息(静态方式)

一.猜想数据存放路径 微信现在是老少皆宜,大街小巷都在使用,已经替代了传统的短信聊天方式了,只要涉及到聊天就肯定有隐私消息,那么本文就来讲解如何获取微信的聊天记录以及通讯录信息. 首先我们在没有网络的时候,打开微信同样可以查看聊天记录,说明微信会把聊天记录保存到本地,那么这么多信息肯定会保存在数据库中,所以我们可以去查看微信的databases目录看看内容: 可惜的是,我们在这个里面并没有发现一些有用的数据,所以这时候就了解到了微信因为把重要信息的数据库存在其他目录下面,我们可以直接把微信的整个