tutorial springframework framework descargar java spring

java - springframework - ¿Cómo obligo a un contenedor de resorte a no devolver una instancia única de un frijol?



spring framework tutorial (2)

Cuando llamo a getBean(name) en un BeanFactory , obtengo una instancia del bean definido en el contexto de la aplicación. Sin embargo, cuando vuelvo a llamar a getBean(name) (con el mismo nombre), obtengo la misma instancia del bean. Entiendo cómo esto sería deseable en algunos (¿muchos?) Casos, pero ¿cómo le digo a BeanFactory que me dé una nueva instancia?

Ejemplo de configuración de Spring (tersely ... He omitido algo de verbosidad, pero esto debería aclarar el punto):

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

Ejemplo 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''s the same // instance }

Cuando ejecuto esto, obtengo algo como:

misc.BeanClass@139894 misc.BeanClass@139894

Tenga en cuenta que ambos tienen el mismo OOID ... así que estas son las mismas instancias ... pero quería instancias diferentes.


Debes decirle a Spring que quieres un prototipo de frijol en lugar de un frijol singleton

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

Esto te dará una nueva instancia con cada solicitud.


El alcance predeterminado es singleton, pero puede establecerlo en prototipo, solicitud, sesión o sesión global.