Я вижу, что он инициализирует прототип bean-компонентов при первоначальном запуске. Как этого избежать?
2 ответа
Это неверно, bean-компоненты с областью видимости прототипа не инициализируются при запуске, если что-то еще не имеет ссылки на них.
Если вы обнаружите, что это происходит, то у вас должна быть ссылка из одноэлементного компонента на объектный компонент, и инициализация одноэлементного компонента запускает создание прототипа.
Как говорит Скаффман в своем post, прототипы beans не инициализируются при запуске.
Даже этот компонент-прототип, для которого для параметра lazy-init установлено значение false, не создается до выполнения метода ApplicationContext.getBean(..)
.
<bean id="demo" class="demo.Demo" scope="prototype" lazy-init="false">
Просто добавьте сообщение журнала отладки в конструктор вашего bean-компонента или запустите отладчик, и вы увидите это сами.
Если вы получили свой прототип bean-компонента следующим образом:
Demo demo = context.getBean("demo", Demo.class);
Тогда нет никаких шансов, что он инициализируется при запуске контейнера.
Если у вас все еще есть проблемы с активной инициализацией bean-компонента с областью видимости прототипа, я предлагаю вам показать код, который взаимодействует с контейнером Spring и конфигурацией Spring.
Ситуация, когда компонент-прототип будет инициализирован при запуске контейнера (если ваш компонент не настроен с помощью lazy-init="true"
):
SingletonBean singletonBean = context.getBean(SingletonBean.class);
Demo demo = singletonBean.getDemo();
Когда одноэлементный компонент имеет зависимость от прототипа, он будет инициализирован вместе с одноэлементным компонентом.
Другой побочный эффект при получении демонстрационного объекта через singletonBean заключается в том, что у вас будет только один демонстрационный объект, независимо от того, сколько раз вы выполняете метод context.getBean(SingletonBean.class);
.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.