Подтвердить что ты не робот

Как заставить контейнер spring не возвращать одноэлементный экземпляр bean?

Когда я вызываю getBean(name) в BeanFactory, я возвращаю экземпляр bean, определенный в контексте приложения. Однако, когда я снова вызываю getBean(name) (с тем же именем), я получаю тот же экземпляр bean назад. Я понимаю, как это было бы желательно в некоторых (много?) Случаях, но как я могу сообщить BeanFactory, чтобы дать мне новый экземпляр?

Пример конфигурации Spring (tersely... Я не упоминал многословия, но это должно получить точку):

<beans>
   <bean id="beanA" class="misc.BeanClass"/>
</beans>

Пример Java:

for(int i = 0;i++;i<=1) {
    ApplicationContext context = ClassPathXmlApplicationContext("context.xml");
    Object o = context.getBean("beanA");

    System.out.println(o.toString());  // Note: misc.BeanA does not implement 
                                       // toString(), so this will display the OOID
                                       // so that we can tell if it the same
                                       // instance
}

Когда я запускаю это, я получаю что-то вроде:

[email protected]
[email protected]

Обратите внимание, что оба имеют одинаковый OOID... так что это те же экземпляры... но мне нужны разные экземпляры.

4b9b3361

Ответ 1

Вам нужно сообщить spring, что вам нужен прототип bean, а не singleton bean

<bean id="beanA" class="misc.BeanClass" scope="prototype"/>

Это даст вам новый экземпляр с каждым запросом.

Ответ 2

По умолчанию scope является одноточечным, но вы можете установить его на прототип, запрос, сеанс или глобальный сеанс.