En Spring framework, podemos crear beans en 6 bean scopes incorporados y también puedes definir tu bean scope personalizado. De estos seis ámbitos, cuatro están disponibles sólo si se utiliza un ApplicationContext consciente de la web. Los ámbitos singleton y prototype están disponibles en cualquier tipo de contenedor IOC.

Table of Contents1. Spring Bean Scope Types 1.1. singleton scope 1.2. prototype scope 1.3. request scope 1.4. session scope 1.5. application scope 1.6. websocket scope2. Custom thread scope3. Summary

Tipo de Ámbito de los Frijoles Spring

En Spring, el ámbito se puede definir utilizando la anotación @Scope del frijol Spring. Vamos a enumerar rápidamente todos los seis ámbitos de frijoles incorporados disponibles para usar en el contexto de la aplicación de primavera. Estos mismos ámbitos se aplican también al ámbito de los beans de Spring Boot.

Alcance Descripción
singleton (por defecto) Una sola instancia de objeto bean por contenedor IoC de spring
prototype Al contrario que el singleton, produce una nueva instancia cada vez que se solicita un bean.
request Se creará una única instancia y estará disponible durante todo el ciclo de vida de una petición HTTP.

Sólo es válido en Spring web-aware ApplicationContext.

session Se creará una única instancia y estará disponible durante el ciclo de vida completo de una Sesión HTTP.

Sólo es válido en Spring compatible con la web ApplicationContext.

application Se creará una única instancia y estará disponible durante el ciclo de vida completo de ServletContext.

Sólo es válido en el Spring web-aware ApplicationContext.

websocket Se creará una única instancia y estará disponible durante el ciclo de vida completo de WebSocket.

Sólo es válido en el Spring web-aware ApplicationContext.

1.1. ámbito singleton

singleton es el ámbito por defecto del bean en el contenedor spring. Le dice al contenedor que cree y gestione sólo una instancia de la clase bean, por contenedor. Esta única instancia se almacena en una caché de tales beans singleton, y todas las solicitudes y referencias posteriores para ese bean con nombre devuelven la instancia almacenada en caché.

Ejemplo de bean de ámbito singleton utilizando Java config –

Ejemplo de bean de ámbito singleton utilizando XML config –

1. Ámbito prototipo.2. prototype scope

prototype scope provoca la creación de una nueva instancia del bean cada vez que se realiza una petición del bean por parte del código de la aplicación.

Debes saber que los métodos del ciclo de vida del bean de destrucción no son llamados prototype beans de ámbito, sólo se llaman los métodos de callback de inicialización. Así que como desarrollador, eres responsable de limpiar las instancias de bean de ámbito prototipo y cualquier recurso que contengan.

Ejemplo de configuración Java del ámbito del bean prototipo –

@Component@Scope("prototype")public class BeanClass {}

Ejemplo de configuración XML del ámbito del bean prototipo –

<bean class="com.howtodoinjava.BeanClass" scope="prototype" />
Como norma, deberías preferir usar el prototype scope para todos los beans con estado y el singleton scope para los beans sin estado.
Para utilizar beans en los ámbitos de solicitud, sesión, aplicación y websocket, es necesario registrar el RequestContextListener o RequestContextFilter.

1.3. Ámbito de las peticiones

En el ámbito request, el contenedor crea una nueva instancia para todas y cada una de las peticiones HTTP. Por lo tanto, si el servidor está manejando actualmente 50 solicitudes, entonces el contenedor puede tener como máximo 50 instancias individuales de la clase bean. Cualquier cambio de estado en una instancia, no será visible para otras instancias. Estas instancias se destruyen tan pronto como la solicitud se completa.

Ejemplo de configuración Java del ámbito de los beans de solicitud –

@Component@Scope("request")public class BeanClass {}//or@Component@RequestScopepublic class BeanClass {}

Ejemplo de configuración XML del ámbito de los beans de solicitud –

<bean class="com.howtodoinjava.BeanClass" scope="request" />

Lee más: ¿Cómo funcionan los servidores web?

1.4. ámbito de la sesión

En el ámbito session, el contenedor crea una nueva instancia para todas y cada una de las sesiones HTTP. Así, si el servidor tiene 20 sesiones activas, entonces el contenedor puede tener como máximo 20 instancias individuales de la clase bean. Todas las peticiones HTTP dentro del tiempo de vida de una sesión tendrán acceso a la misma instancia de bean en ese ámbito de sesión.

Cualquier cambio de estado en una instancia, no será visible para otras instancias. Estas instancias son destruidas tan pronto como la sesión es destruida/terminada en el servidor.

Ejemplo de configuración Java del ámbito de los beans de sesión –

@Component@Scope("session")public class BeanClass {}//or@Component@SessionScopepublic class BeanClass {}

Ejemplo de configuración XML del ámbito de los beans de sesión –

<bean class="com.howtodoinjava.BeanClass" scope="session" />

1. Ámbito de aplicación.5. ámbito de la aplicación

En application ámbito, el contenedor crea una instancia por tiempo de ejecución de la aplicación web. Es casi similar al singleton scope, con sólo dos diferencias es decir.

  1. application scoped bean es singleton por ServletContext, mientras que singleton scoped bean es singleton por ApplicationContext. Tenga en cuenta que puede haber múltiples contextos de aplicación para una sola aplicación.
  2. application scoped bean es visible como un atributo ServletContext.

Ejemplo de configuración en Java del ámbito del bean de aplicación –

@Component@Scope("application")public class BeanClass {}//or@Component@ApplicationScopepublic class BeanClass {}

Ejemplo de configuración en XML del ámbito del bean de aplicación –

<bean class="com.howtodoinjava.BeanClass" scope="application" />

1.6. websocket scope

El protocolo WebSocket permite la comunicación bidireccional entre un cliente y un host remoto que ha optado por la comunicación con el cliente. El Protocolo WebSocket proporciona una única conexión TCP para el tráfico en ambas direcciones. Esto es especialmente útil para aplicaciones multiusuario con edición simultánea y juegos multiusuario.

En este tipo de aplicaciones web, HTTP se utiliza sólo para el handshake inicial. El servidor puede responder con el estado HTTP 101 (cambiando de protocolo) si está de acuerdo – con la solicitud de handshake. Si el handshake tiene éxito, el socket TCP permanece abierto y tanto el cliente como el servidor pueden utilizarlo para enviarse mensajes.

Ejemplo de configuración Java del ámbito del bean websocket –

@Component@Scope("websocket")public class BeanClass {}

Ejemplo de configuración XML del ámbito del bean websocket –

<bean class="com.howtodoinjava.BeanClass" scope="websocket" />

Tenga en cuenta que websocket los beans con ámbito son típicamente singletons y viven más tiempo que cualquier sesión individual de WebSocket.

Alcance de hilo personalizado

Spring también proporciona un alcance no predeterminado thread utilizando la clase SimpleThreadScope. Para usar este scope, debes registrarlo en el contenedor usando la clase CustomScopeConfigurer.

Cada petición de un bean devolverá la misma instancia dentro del mismo hilo.

Ejemplo de configuración Java del ámbito de un bean thread –

@Component@Scope("thread")public class BeanClass {}

Ejemplo de configuración XML del ámbito de un bean thread –

<bean class="com.howtodoinjava.BeanClass" scope="thread" />

Resumen

El marco de trabajo de Spring ha proporcionado seis ámbitos de bean de primavera y las instancias tienen diferentes ciclos de vida dentro de cada ámbito. Como desarrollador, debemos elegir el ámbito de cualquier frijol gestionado por el contenedor sabiamente. Además, debemos tomar decisiones sabias cuando los frijoles con diferentes ámbitos se refieren entre sí.

Intenta recordar toda la información anterior para responder a cualquier pregunta de la entrevista sobre el ámbito de los beans de Spring.

¡Feliz aprendizaje!

¿Ha sido útil este post?

Haznos saber si te ha gustado el post. Sólo así podremos mejorar.
No

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *