Загадка загрузчика классов в среде Tomcat + Spring - PullRequest
0 голосов
/ 02 апреля 2011

У меня есть два статических метода Java для класса A:

private static String value;
public static void setValue(String str) {
    value = str;
}
public static String getValue() {
    return value;
}

звучит просто. Я вызываю A.setValue ("someValue"), затем в некоторых других классах, которые загружаются в весенний контекст приложения, я вызываю A.getValue (), я получаю ноль назад; в то же время в исходном месте A.getValue () по-прежнему возвращает «someValue».

Так что мне кажется, что в JVM tomcat есть два экземпляра одного и того же java-класса. Есть ли способ убедиться, что для одного Java-класса существует только один экземпляр?

Спасибо.

1 Ответ

0 голосов
/ 02 апреля 2011

Возможно, у вас на самом деле нет синглтона, и вы видите класс А, загруженный двумя разными загрузчиками классов? Одним из решений в этом случае будет создание bean-компонента Spring (не в качестве прототипа) и его внедрение в два места, где вы его используете, - таким образом, фреймворк управляет жизненным циклом синглтона. Если это все еще проблема, возможно, вы захотите рассмотреть дизайн выше, особенно в отношении одновременного доступа.

...