这是我使用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.
反射是否会为单身类产生问题?
答案 0 :(得分:0)
如果你需要一个不可破坏的单例类(不仅仅是一个单独的 bean ,它由许多其他bean共享,但实际上是一个单独的类,其中类只能实例化一次),然后enum方法是一个很好的方法。 Spring不会尝试实例化枚举本身,因为这真的没有意义;与仅仅调用私有构造函数相比,这将是一个非常破碎的事情。
在这种情况下,要从Spring配置引用枚举实例,您可以执行相同的操作as for any other static constant;例如:
<util:constant static-field="MyInstanceFactory.INSTANCE" />