我有两个类 A 的 java 静态方法:
private static String value;
public static void setValue(String str) {
value = str;
}
public static String getValue() {
return value;
}
听起来很简单。我调用 A.setValue("someValue"),然后在由 spring 应用程序上下文加载的其他一些类中,我调用 A.getValue(),返回 null;同时,在原来的地方,A.getValue() 仍然返回“someValue”。
所以在我看来,在 tomcat JVM 中有同一个 java 类的两个实例。有什么方法可以确保一个 Java 类只有一个实例吗?
谢谢。
最佳答案
也许您在这里实际上没有单例,而是看到类 A 由两个不同的类加载器加载?在这种情况下,一种解决方案是创建 Spring bean(而不是作为原型(prototype))并将其注入(inject)到您使用它的两个地方——这样框架就可以管理单例的生命周期。如果这仍然是一个问题,您可能需要考虑上述设计,特别是关于并发访问的设计。
关于java - Tomcat+Spring环境下的Classloader之谜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5519240/