繁体   English   中英

与Spring DI一起使用的Java Static最终替代方案

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM