java - Tomcat+Spring环境下的Classloader之谜

标签 java spring tomcat static classloader

我有两个类 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/

相关文章:

java - 包可以从 JDK 11 模块系统中的多个模块访问

java - 使用临时表的数据库连接池

java - 如何从 docker-compose 文件覆盖/etc/resolv.conf 中的 Docker 嵌入式 DNS 服务器

Spring mvc : Changing default Response format from xml to json

java - jna Native.LoadLibrary 无法在服务器上加载库(在本地工作)

java - 在 Spring XML 中配置 WebBindingInitializer

java - 期待 JUnit、Spring 和 HIbernate 的数据库异常

java - @InjectMocks 和非模拟对象(Spring Data Repositories)

java - tomcat在spring添加spring data redis依赖后不启动

java - Atlassian Confluence SDK 启动应用程序 404 问题