Q:

How can I make an existing Java class/interface implementation a singleton?

Suppose I am using an ApplicationContext implementation in Spring. 
ApplicationContext is an interface in the Java Spring Framework and I cannot change it.
How do I ensure that there can be only one instance of this implementation?
For eg. I have the following code - 
public class ApplicationContextSingleton 
{
     private static ApplicationContext context;
     private static int numberOfInstances = 0;

     public static ApplicationContext getApplicationContext()
     {
         if(numberOfInstances == 0)
         {
             context = new ClassPathXmlApplicationContext("spring.xml");
             numberOfInstances++;
         }
         return context;
     }
}

This way, I can ensure that there is only one instance of ApplicationContext, provided it is obtained as follows - 
ApplicationContext context = ApplicationContextSingleton.getApplicationContext();

But that doesn't stop another programmer from saying -
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); 

thereby creating a new ApplicationContext. How to prevent this from occuring?

A:

You want to make ApplicationContext a singleton, so I'd override the class with my own custom class, make sure it appears first on the class path, and make it have a private constructor.
That is, if you're dead set on making it a singleton.  There are better ways to solve your problem, as pointed out by other answers and comments.  
Should note that it's usually a bad idea to override pieces of libraries, as it can be the cause of headaches later, especially when you try upgrading your framework version.

