В моем весеннем веб-приложении определен bean-компонент, и я ожидаю, что у меня будет только один экземпляр этого bean-компонента. Вот мое определение bean-компонента:
<bean id="accessControl" class="my.spring.app.AccessControl" />
В конструкторе 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» устанавливается в конструкторе, и конструктор не должен вызываться снова и снова, но это именно то, что происходит.Фактически, я добавил оператор log в конструктор, и каждый раз создается новый объект.
Я прочитал: http://www.digizenstudio.com/blog/2006/09/14/a-spring-singleton-is-not-a-singleton/, но я не думаю, что имею дело с одним и тем же классом, определенным дважды сдва разных идентификатора компонента и один и тот же контекст приложения.
Кто-нибудь может поделиться тем, что не так с тем, как я определил компонент?
Я также экспериментировал с singleton = "true" иscope = "singleton", но они не делают различий.
Спасибо.