[英]Java Static final alternatives for use with Spring DI
我有一个想拥有static final
变量的类。
public static final Map<String, Long> ID_MAP;
我希望能够通过Spring注入地图。 b / c无法完成,因为这是static final
。 我的替代方法是将其声明为static
并使用带有setter的Spring。 就像是
public void setIDMapSpring (long iDMapSpring){
ID_MAP = iDMapSpring;
但是,这意味着另一个类可以更改该值。 有什么我可以尝试的替代方法。 我当时在考虑将Map作为final
字段使用Singleton,但我仍想弄清楚如何将Map以及可能要标记为final
其他变量传递给getInstance
方法。 另外,我很难找到最简单,最不复杂的解决方案。
将地图设为字段并注入单例。
如果您担心在Spring设置之后外部类会更改该值,则可以将一个标志集成到您的类中,该标志只能将该字段设置一次。 假设您将名为“ CAN_SET_ID_MAP”的静态AtomicBoolean
初始化为true。 然后,在地图的设置器中:
if (CAN_SET_ID_MAP.compareAndSet (true, false)) {
ID_MAP = iDMapSpring;
} else {
throw new IllegalStateException ("ID_MAP already set");
}
还有其他方法可以做到这一点。 无论如何,您可能都想使用线程安全的保护形式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.