Как говорит Скаффман в своем посте , бины-прототипы не инициализируются при запуске.
Даже этот bean-компонент-прототип, для которого настроен параметр lazy-init со значением false, не создается до выполнения метода ApplicationContext.getBean(..)
.
<bean id="demo" class="demo.Demo" scope="prototype" lazy-init="false">
Это просто добавление сообщения журнала отладки в конструктор вашего компонента или запуск вашего отладчика, тогда вы увидите это сами.
Если вы получите ваш 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);
.