在Spring MVC中使用Singleton枚举

时间:2014-02-03 06:54:18

标签: spring spring-mvc singleton

这是我使用enum的单身课程:

public enum MyInstanceFactory {
    INSTANCE;    
    private SOMEOBJECT;
    private int countInitialization = 0;
    private MyInstanceFactory(){

        countInitialization++;
        System.out.println("WOW!! This has been initialized: ["+countInitialization+"] times");
        SOMEOBJECT = SOMETHING
    }

    public Session getSomeobject(){ return SOMEOBJECT; }
}

现在我把它称为内部MVC控制器

Session cqlSession = MyInstanceFactory.INSTANCE.getSomeobject();

这样它只会在第一次和下一次调用constructer时返回正确的SOMEOBJECT值。

我的问题是I want to do the same thing when a spring application start i.e. initializing contructor once and use **getSomeobject** multiple times.

我看到THIS SO ANSWER,但他们在这里说

If it finds a constructor with the right arguments, regardless of visibility, it will use reflection to set its constructor to be accessible.

反射是否会为单身类产生问题?

1 个答案:

答案 0 :(得分:0)

如果你需要一个不可破坏的单例类(不仅仅是一个单独的 bean ,它由许多其他bean共享,但实际上是一个单独的,其中类只能实例化一次),然后enum方法是一个很好的方法。 Spring不会尝试实例化枚举本身,因为这真的没有意义;与仅仅调用私有构造函数相比,这将是一个非常破碎的事情。

在这种情况下,要从Spring配置引用枚举实例,您可以执行相同的操作as for any other static constant;例如:

<util:constant static-field="MyInstanceFactory.INSTANCE" />