Por defecto, el Bean creado por Spring es singleton. Son seguros para subprocesos porque son apátridas. Cuando queremos que Spring cree un Bean con estado, necesitamos usar el alcance del prototipo para la definición de Bean. Necesitamos ocuparnos de los problemas de seguridad de subprocesos para ellos. Todo Bean sin estado se contaminará cuando se les inyecte el prototipo de frijol. Entonces, no puedo imaginar dónde podemos usar el alcance del prototipo. ¿Puedes darnos un escenario típico de que podemos/necesitamos usar el prototipo Spring Bean? Además, ¿cómo podemos anular la contaminación con estado en otros granos de singleton?¿Para qué se utiliza el prototipo Spring Bean?
Respuesta
Existen muchas razones para usar el alcance del prototipo, por ejemplo, cada vez que use "nuevo" en lugar de utilizar un singleton. Un bean por usuario, un bean por solicitud, una colección de beans únicos, etc. Después de todo, en cualquier aplicación no trivial, ¿no usa non-singletons mucho más que singletons?
granos de ámbito-Singleton no son seguras para subprocesos simplemente porque son únicos – deben ser escritos a ser flujos seguros. No se vuelven seguros a hilos mágicamente. El alcance de un bean es solo eso, su alcance: no hace que el bean sea apropiado para el alcance particular – que corresponde al desarrollador.
Percibo el prototipo de alubias como una alternativa a las clases de fábrica utilizadas para crear objetos. La diferencia es que en el caso del prototipo, los frijoles spring le ahorrarán un poco de código para la inyección de dependencias y también proxy automáticamente sus objetos para las transacciones, etc., cuando corresponda.
Yo prefiero el enfoque de fábrica. Un escenario razonable para el alcance del prototipo que encontré fue un objeto con estado, necesario para diferentes beans conocidos y cada uno requería su propia copia. Una clase de fábrica dedicada sería redundante en este escenario, ya que no necesitaba crear objetos sobre la marcha, sino solo durante la instanciación de otros beans.
- 1. Crear prototipo de Spring Bean con anotaciones?
- 2. Spring ApplicationContext Bean Scope
- 3. ¿Para qué se utiliza el paquete original AndroidManifest?
- 4. ¿Para qué se utiliza global.asax?
- 5. ¿Para qué se utiliza Go?
- 6. ¿Para qué se utiliza iframe?
- 7. ¿Para qué se utiliza _references.js?
- 8. ¿para qué se utiliza ids.xml?
- 9. ¿Para qué se utiliza .data.rel.ro?
- 10. ¿Para qué se utiliza Sqlite?
- 11. ¿Para qué se utiliza nbactions.xml?
- 12. ¿para qué se utiliza java.lang.reflect.Method.isBridge()?
- 13. ¿Para qué se utiliza GCC_NO_COMMON_BLOCKS?
- 14. ¿Para qué se utiliza #pragma?
- 15. ¿Para qué se utiliza RFHUTIL?
- 16. ¿Para qué se utiliza LDAP?
- 17. ¿Puedo crear un prototipo de bean con ámbito con Spring Javaconfig?
- 18. basado en anotación Spring bean validation
- 19. Symfony2 ScopeCrossingInjectionException cuando utiliza prototipo de alcance
- 20. ¿Para qué se supone que se utiliza la anotación javax.inject.Named?
- 21. Registro de beans (prototipo) en tiempo de ejecución en Spring
- 22. Spring - ¿Cómo puedo destruir los granos de mi prototipo?
- 23. ¿Utiliza AOP? ¿y para qué?
- 24. ¿Para qué se utiliza `related_name` en Django?
- 25. SOAP - namespace, ¿para qué se utiliza?
- 26. Makefile $ @ variable: ¿para qué se utiliza?
- 27. ¿Para qué se utiliza std :: vector :: front()?
- 28. Android: ¿Para qué se utiliza android.R.id.content?
- 29. Grails Spring Security utiliza el correo electrónico para iniciar sesión
- 30. ¿Para qué se utiliza Google Analytics '__utm.gif?
Tengo que estar en desacuerdo con mi buen amigo Dave aquí. Personalmente, tuve 0 buenos motivos para crear un prototipo de Spring Bean en cualquiera de mis aplicaciones de producción. Me preguntaría por qué necesita este objeto como un frijol. Si se trata realmente de un objeto con estado, ¿se trata de un Bean de entidad creado por JPA o JDBC de modo que no se llame nuevo de todos modos? Es un objeto similar a View DTO, de nuevo solo llame a new allí. Aquí hay un enlace a Marten diciendo lo mismo .. http://forum.spring.io/forum/spring-projects/container/81737-when-to-set-scope-as-prototype – user1567291
Explicaciones sobre votos a la baja, particularmente cuando la respuesta es correcta, completa y aceptada, generalmente es una buena idea. –