У меня есть bean-компонент, определенный в моем веб-приложении Spring, и я ожидаю, что у меня будет только один экземпляр этого bean-компонента, вот мое определение bean-компонента:
В конструкторе AccessControl я присваиваю объекту идентификатор, что-то вот так:
public class AccessControl {
private long id = 0;
public AccessControl() {
id = System.currentTimeMillis();
}
public long getAccessControlId() {
return id;
}
}
В другом классе я пытаюсь получить экземпляр AccessControl, примерно так:
ApplicationContext ctx =
new ClassPathXmlApplicationContext("acbean.xml");
AccessControl ac = (AccessControl) ctx.getBean("accessControl");
LOGGER_.info("AccessControl Identifier : " + ac.getAccessControlId());
Я ожидаю, что значение «id» будет таким же, потому что значение «id» установлено в конструкторе и конструкторе не должны вызываться снова и снова, но именно это и происходит. Фактически, я добавил в конструктор оператор журнала, и каждый раз создается новый объект.
Я прочитал: http://www.digizenstudio.com/blog/2006/09/14/a-spring-singleton-is-not-a-singleton/ но я не думаю, что имею дело с одним и тем же классом, определенным дважды с двумя разными идентификаторами bean-компонентов, и контекст приложения одинаков.
Может ли кто-нибудь рассказать, что не так с тем, как я определил компонент?
Я также экспериментировал с singleton = "true" и scope = "singleton", но они не делают никаких различий.
Спасибо.