programacion partir orientada objetos generar ejemplos diagrama codigo clases asociacion agregacion java spring prototype-scope

orientada - generar diagrama de clases a partir de codigo java eclipse



Alcance prototipo de primavera-¿Casos de uso? (5)

Tengo una comprensión clara de los diversos ámbitos de los frijoles de primavera. Pero estoy buscando algunos casos de uso del alcance del prototipo de un bean en proyectos de nivel empresarial. Sería fantástico si pudiera compartir algunos casos de uso de la vida real del ámbito del prototipo (no el ámbito de la solicitud ).


Como alguien que trabajó anteriormente en SpringSource y ha hablado con los desarrolladores sobre este tema. Aquí está mi toma. El prototipo es excelente para probar cosas, de ahí el nombre de prototipo y no la creación o algo más de la descripción de cómo crear una nueva instancia del bean cada vez que lo solicite desde el contenedor de Spring.

También he encontrado en mi uso a lo largo de los años que no puedo pensar en ningún otro lugar donde el prototipo tenga sentido en cualquier aplicación de producción del mundo real. Si su objeto mantiene el estado, normalmente no debería ser un bean Spring. He encontrado en todas las aplicaciones en las que he trabajado que todos los beans son Servicios, Repositorios y Singleton que no son objetos del estado en los que necesito agregar características como Transaccionalidad, JPA, JMS y los Me gusta que nos dan las características empresariales que los POJOs no tienen. t tiene

Los objetos en mi sistema que se mantienen en estado son quizás mis Entidades y DTO de vista, u otras cosas que simplemente no tienen sentido para ser un Spring Bean. Por lo tanto, en mis aplicaciones en producción no ha habido un solo bean "prototipo".


El alcance de prototipo da como resultado la creación de una nueva instancia de bean cada vez que el código de la aplicación realiza una solicitud para el bean.

Debe saber que los métodos de ciclo de vida de los beans de destrucción no se denominan beans con alcance de prototipo, solo se llaman los métodos de devolución de llamada de inicialización. Por lo tanto, como desarrollador, usted es responsable de limpiar las instancias de frijoles con alcance de prototipo y cualquier recurso que contenga.

Ejemplo de configuración de Java del prototipo de alcance de bean -

@Componente

@Scope ("prototipo")

Elemento de lista

clase pública BeanClass {}


He usado prototipos principalmente en combinación con el lookup-method primavera. Mi aplicación es un servidor de juegos que necesita decodificar bytes entrantes en el puerto tcp. Considere la siguiente definición de frijol

<bean id="channelBufferProtocol" class="org.menacheri.protocols.impl.ChannelBufferProtocol"> <lookup-method name="createLengthBasedFrameDecoder" bean="lengthFieldBasedFrameDecoder"/> <property name="eventDecoder" ref="eventDecoder"></property> <property name="lengthFieldPrepender" ref="lengthFieldPrepender"></property> <property name="eventEncoder" ref="eventEncoder"></property> </bean>

Dentro de la clase de implementación de protocolo, tengo el siguiente código para crear el decodificador de tramas pipeline.addLast("lengthDecoder", createLengthBasedFrameDecoder()); Cuando se invoca este método, Spring creará una nueva instancia de decodificador de trama y la devolverá.

El bean devuelto por bean="lengthFieldBasedFrameDecoder" debe ser un prototype de alcance, ya que es un bean con estado en mi aplicación.

Nota: Un protocolo no es más que un conjunto específico de decodificadores y codificadores encadenados. Patrón de diseño "Cadena de responsabilidad".


Podemos usar el alcance del prototipo en el caso de clases modelo (también llamadas como Entidades en hibernación) ya que la aplicación necesita diferentes instancias de clase modelo para cada subproceso / solicitud.


Usé prototipos de beans para declarar elementos de formulario configurados (un cuadro de texto configurado para validar nombres, direcciones de correo electrónico, por ejemplo) y obtener instancias "vivas" de ellos para cada formulario creado en mi aplicación web. Los detalles no son importantes, solo el principio, que resumiría de esta manera:

  • Hay una clase que tiene muchos parámetros de configuración.
  • Debe crear instancias de él con un conjunto de configuración predefinida (fancy1, fancy2, stc.)
  • Piense en la applicationContext.getBean("myBeanConfiguredFancy1") como un tipo de método de fábrica que crea la instancia como preconfigurada en el xml