Saltar al contenido

¿Cuándo usar el alcance del prototipo Spring?

Te recomendamos que revises esta respuesta en un ambiente controlado antes de enviarlo a producción, un saludo.

Solución:

Para ser claras definiciones simples:

  • Alcance del prototipo = Se crea un nuevo objeto cada vez que se inyecta/busca. utilizará nuevos SomeBean() cada vez.

  • Ámbito Singleton = Se devuelve el mismo objeto cada vez que se inyecta/busca. Aquí instanciará una instancia de SomeBean y luego devolverlo cada vez.

El bean prototipo se crea en el momento del uso. Entonces, cuando desea tener beans con estado, a veces es muy necesario tener un alcance de prototipos o cuando no desea almacenar en caché ningún valor en beans. El bean prototipo se puede asociar con una sesión o alguna llamada.

Ejemplo:

Un objeto de acceso a datos (DAO) normalmente no se configura como un prototipo, porque un DAO típico no tiene ningún estado conversacional; simplemente fue más fácil para este autor reutilizar el núcleo del diagrama singleton.

Hay algunos casos de uso interesantes al usar el alcance prototipo construirá una arquitectura/diseño de aplicación mejor y más confiable, por ejemplo, un sistema en tiempo real.

Imagine que debe construir un sistema en tiempo real para el rastreo de vehículos y tendrá 2.000.000 de autos compartiendo información cada 5 segundos. En el lado del servidor, trabajará con dos o más grupos distintos de configuraciones, uno para Autos y otro uno para camiones.

Basado en este ejemplo simple, si diseña su aplicación para trabajar con distintos grupos de configuración en la memoria a través del patrón prototipo, logrará un mejor rendimiento.

Entonces, en este caso, siempre que el servidor reciba un nuevo mensaje de un Camión, por ejemplo, el servidor obtendrá la instancia de la configuración en la memoria de un mapa hash de instancias de Configuración de grupo de vehículos y luego aplique el comportamiento de configuración que debe tener este mensaje, por ejemplo: como tiempo de espera, reintento… y etc.

Me gustaría resaltar que hay muchas formas de implementar esta situación, pero este ejemplo muestra que un patrón de prototipo es muy poderoso en cuestiones de rendimiento y patrones de diseño.

Como dice la documentación, crear un bean Foo con alcance de prototipo es lo mismo que llamar:

Foo foo = new Foo(dependency1, dependency2, ...);
foo.initialize(dependency7, dependency8...);

La única buena razón para usar un bean de alcance prototipo en lugar de new es entonces cuando las dependencias utilizadas para la creación e inicialización de la instancia deben mantenerse fuera del código que necesita una nueva instancia.

Un ejemplo es si quisiera escribir un código de persistencia similar a los beans EJB2 Java Entity, como

Person p = ...
p.setName("John Doe");
p.save(); // write to DB

En lugar de usar la forma JPA

Person p = new Person();
p.setName("John Doe");
personService.save(p); // write to DB

En el estilo de código del bean de entidad, la instancia de la persona necesita saber cómo debe persistir, por lo que debe inyectarse con detalles de persistencia que el código que escribe una persona no debe conocer.

Otro ejemplo: si desea usar la clase Java SimpleDateFormat no segura para subprocesos en muchos lugares de su aplicación, con un patrón de formato de un archivo de configuración (tal vez usando diferentes formatos dependiendo de otras condiciones). En lugar de crear una nueva instancia de formato en todos esos lugares, cargar también el formato string desde un archivo (o propiedad de resorte), puede usar el alcance del prototipo para obtener una instancia nueva cada vez, con los detalles de configuración del formato común en un solo lugar.

Reseñas y valoraciones

Tienes la opción de añadir valor a nuestra información añadiendo tu veteranía en las aclaraciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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