Spring - Scope de un bean - Tipos de Scope de Spring

Por defecto, todos los beans de Spring son Singletons.
Spring sólo crea una única instancia de cada objeto en su contenedor y luego la reutiliza. Todos sabemos que en ciertos casos esto no es conveniente, por lo que nos da la opción de cambiarlo. Para ello, en la etiqueta bean hay un atributo llamado scope que puede tomar los siguientes valores:
  • Singleton: es el valor default e implica una única instancia.
  • prototype: se instancia todas las veces que sea necesario.
  • request: válido en Spring MVC, donde es instanciado por cada petición HTTP.
  • session: válido en Spring MVC, donde es instanciado por cada usuario.
  • global-session: válido en Spring MVC, donde es instanciado en una session global HTTP.
Ej. Spring context  Singleton:
<!-- the following is equivalent, though redundant (singleton scope is the default); using spring-beans-2.0.dtd -->
<bean id="accountService" class="com.foo.DefaultAccountService" scope="singleton"/>

<!-- the following is equivalent and preserved for backward compatibility in spring-beans.dtd -->
<bean id="accountService" class="com.foo.DefaultAccountService" singleton="true"/>

Ej. Spring context  Prototype:
<!-- using spring-beans-2.0.dtd -->
<bean id="accountService" class="com.foo.DefaultAccountService" scope="prototype"/>

<!-- the following is equivalent and preserved for backward compatibility in spring-beans.dtd -->
<bean id="accountService" class="com.foo.DefaultAccountService" singleton="false"/>


Ojo si usan una versión anterior a Spring 2 que esto se trata de manera diferente.


Como se habrán dado cuenta, este singleton de Spring tiene una particularidad: no es realmente un Singleton. Es decir, Spring nos asegura que nos devolverá una única instancia pero nada impide que haga un
new Object().
Muchas veces nosotros necesitamos controlar el Singleton para evitar problemas. Para ello Spring nos brinda una solución:
 Y en el xml definimos cual es el método encargado de crear el bean:
<bean id="fechaUtils" class="calendario.FechaUtils" factory-method="getInstance"/>
   

De esta forma, es posible adaptar a Spring para que instancie los objetos como nosotros le digamos. Este ya si es un Singleton propiamente dicho.



Saludos
Spring - Scope de un bean - Tipos de Scope de Spring Spring - Scope de un bean - Tipos de Scope de Spring Reviewed by El lado oscuro de java on mayo 14, 2012 Rating: 5

No hay comentarios:

Con la tecnología de Blogger.