FROMDEV

Hacking By Reflection: Creating Multiple instance of a Singleton class

Singleton.java implements a thread safe singleton instance creation for this class. Even if multiple threads are accessing this should create only one instance of class.

package hacking;

public class Singleton {

private Singleton(){

System.out.println(“I am Singleton”);

}

private static Singleton s = new Singleton();

public static Singleton getInstance(){

return s;

}

}

Test.java file hacking the Singleton class to create multiple instances.

package hacking;


import java.lang.reflect.Constructor;


public class Test {

public static void main(String[] args) throws Exception {

Singleton s = Singleton.getInstance();

Constructor c[] = Singleton.class.getDeclaredConstructors();

c[0].setAccessible(true);

c[0].newInstance(null);

}

}

Here is the output of this program

 $  java Test

I am Singleton

I am Singleton

The private constructor is called for second time also, that means the class is not singleton anymore.

Exit mobile version