если вы установите прототип в свой прототип, то каждый раз, когда Spring загружает ваш бин, он должен пересчитывать размер списка гостей:
<bean name="party" class="some.custom.class.Party" scope="prototype">
Таким образом, party
становится прототипом, но guestList
может оставаться одиночным ((это область действия по умолчанию).
Однако есть одна загвоздка: если у вас есть другой компонент, например partyHost
(который является синглтоном), и ему вводится party
(который является прототипом),partyHost
никогда не получит другой экземпляр party
, поскольку partyHost
является одноэлементным, и в него вводятся зависимости только один раз.Поэтому, чтобы это работало, все ваши bean-компоненты, которым требуется обновленный размер гостевого списка, и все bean-компоненты, которые ссылаются на них и т. Д., Также должны быть прототипами.
Либо так, либо вы должны спроситьSpring напрямую через их API.Если вы используете API, вы можете вызывать его в любое время и получить новый экземпляр компонента-прототипа и, следовательно, обновленный размер списка гостей.
applicationContext.getBean("myPrototype");
Однако лучше избегать Spring API, есливы можете.Обычно разработчики не хотят быть связанными с инфраструктурой DI.