正如本文所讨论的,在集群环境中不适合使用单例(因为不同的 JVM 中有多个单例对象),对于 Spring 框架创建的单例来说必须如此。
如果这是正确的,那么我们必须非常小心地使用 Spring 框架来使用单例类。你能告诉我这是否是正确的理解吗?
情况不一定如此。
如果它们共享有意义的状态,那么在不同的 JVM 中使用单例是一个问题。例如,如果两个独立的实例存在于两个独立的应用程序服务器上,而这两个独立的应用程序服务器都是同一应用程序的一部分,那么存储和发布递增 ID 的单例将是非常危险的。
Spring 中没有任何固有的东西使这或多或少难以处理。您的 Spring bean(可能的服务)应该旨在维护尽可能少的状态作为良好实践的实际问题。如果他们需要共享状态,那么您将必须像处理任何其他共享状态一样解决此问题。
很多人在集群环境中使用 Spring,并且没有遇到与上述相关的任何问题。我就是其中之一!