Java:Singleton,IODH习语和反射攻击

时间:2012-09-18 13:26:43

标签: java reflection singleton

免责声明:这是一个智力练习的问题,因此我不想在这里使用Enum。

参考我之前的问题: Java: Lazy loading Singleton and reflection attack?

以下是我想出的一个解决方案,以防止IODH成语的反射攻击。你能来吗?评论解决方案并提出其他方法? (我知道'许可'方法:https://stackoverflow.com/a/8112238/266103

同样,这段代码严格意义上是一种智力练习,我永远不会在现实生活中使用这样的东西

此外,1)此代码创建两个实例,但如果通过构造函数反射创建实例而不是调用getInstance(),则保留第二个实例,并且2)它不太可能是线程安全的。

public class Singleton 
{
    private volatile static boolean isCreated = false;

    private static class Holder
    {
        private static Singleton instance = new Singleton();
    }

    private Singleton()
    {               
        if(isCreated)
        {
            throw new RuntimeException("Singleton Multiple Instantiation");
        }       
        Holder.instance = this;
        isCreated = true;
    }

    public static Singleton getInstance()
    {
        return Holder.instance;
    }
}

0 个答案:

没有答案