Cuando llamo al getBean(name)
en un BeanFactory
, obtengo una instancia del bean definido en el contexto de la aplicación. Sin embargo, cuando llamo de nuevo al getBean(name)
(con el mismo nombre) obtengo la misma instancia del bean. Entiendo cómo sería deseable en algunos (¿muchos?) Casos, pero ¿cómo le digo al BeanFactory
que me proporcione una nueva instancia?¿Cómo obligo a un contenedor de resorte a no devolver una instancia única de un bean?
Ejemplo de configuración de la primavera (concisamente ... He dejado de lado algún nivel de detalle, pero esto debe obtener el punto de):
<beans>
<bean id="beanA" class="misc.BeanClass"/>
</beans>
Ejemplo de 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 así como:
[email protected]
[email protected]
Tenga en cuenta que ambos tienen el mismo OOID ... así que estas son las mismas instancias ... pero yo quería diferentes instancias.
Esto lo hizo. Dos cosas me descarrilaron: 1. Inicialmente, estaba buscando un argumento para getBean (String), en lugar de un atributo en la configuración ... 2. En Spring 1.x (mi experiencia anterior de primavera), el atributo se llamaba ' singleton ', pero aparentemente no funciona en 2.5. – Jared
Sí, lo cambiaron a "alcance" en Spring 2.x para acomodar solicitud, sesión y sesión global. – duffymo
Si está configurando a través de la clase Java ('@ Configuration') puede' usar @Scope ("prototype") 'en el método de definición de bean –