Spring hace DI y crea objetos para que su programa no tenga que preocuparse de crear objetos. Pero la pregunta aquí es cuando se crea una instancia de objeto inyectado. Es cuando el programa principal hace uso de la instancia o en el momento en que se crea una instancia del programa principal.Cuando Spring crea instancias de objetos que se inyectan
Respuesta
Todos los beans en el contexto se instancian, se inyectan y se inicializan cuando se inicia el contexto. Para cuando se recupera el primer frijol del contexto, todos los frijoles están listos para su uso.
Hay dos cosas que pueden impedir que un grano que se inicializa en el contexto pone en marcha:
- Un grano tiene frijol configurado con un different scope (como
prototype
,request
osession
), utilizando el atributoscope="xyz"
- Un bean ha sido marcado con
lazy-init="true"
, en cuyo caso solo se creará una instancia cuando se solicite explícitamente, o si se requiere como una dependencia de algún otro bean.
Por defecto, las implementaciones applicationContext ansiosamente crear y configurar todos los granos simples como parte del proceso de inicialización. En general, esta preinstalación es deseable, ya que los errores en la configuración o en el entorno se descubren de inmediato, en lugar de horas o incluso días más tarde. Cuando este comportamiento no es deseable, puede evitar la creación de instancias previas de un bean singleton marcando la definición del bean como iniciada en modo perezoso. Un bean inicializado de forma diferida le dice al contenedor IoC que cree una instancia de bean cuando se solicite por primera vez, en lugar de al inicio.
En un comentario, el OP escribe:
Por lo tanto, es responsabilidad del programador para decidir si un grano tiene que ser inicializado o inicializado por adelantado con pereza. Esto podría ser muy subjetivo, pero ¿podría informarme sobre las mejores prácticas seguidas en este tipo de situaciones?
Sí, le corresponde al programador (o integrador de sistema) decidir.
No existen realmente reglas de "mejores prácticas" para decidir. Piénsalo de esta manera:
Si se declara un grano tan perezosamente inicializado cuando siempre se necesitará una instancia, es muy posible que el proceso de arranque lento.
Si declara que un bean se inicializó con impaciencia cuando no siempre es necesario, hará que el proceso de inicio sea más lento y es posible que utilice más memoria. En el peor de los casos, la creación del bean innecesario puede incluso provocar que el inicio falle.
En resumen, debe comprender su aplicación.
+1 agradezco el consejo "en resumen, debe comprender su solicitud". – asgs
- 1. cuando se crea una instancia de un bean de resorte
- 2. ¿LoadLibrary crea instancias distintas?
- 3. ¿Cómo crea db4o objetos?
- 4. ¿Cómo se crean instancias de Spring HandlerInterceptors?
- 5. Cómo conectarse a HSQL que Spring crea cuando se usa jdbc: embedded-database?
- 6. Spring DispatcherServlet Varias instancias
- 7. cuando la chica de fábrica crea objetos en db?
- 8. ¿Cuándo se inyectan los campos @InjectView?
- 9. Gedit en Windows crea varias instancias
- 10. ¿Cómo hace para probar la unidad de código que interactúa con objetos COM de terceros y crea instancias de ellos?
- 11. jQuery evento cuando se crea el elemento
- 12. ¿Cómo se crea un proyecto Spring MVC en Eclipse?
- 13. ¿Cómo crea BinaryFormatter.Deserialize nuevos objetos?
- 14. ¿Se crea una instancia de superclase cuando instanciamos un objeto?
- 15. ¿Se requiere `definer` cuando se crea un procedimiento almacenado?
- 16. ¿Se llama a onCreate cuando se crea un objeto Activity?
- 17. PyBrain: cuando se crea una red desde cero, ¿cómo y dónde se crea un sesgo?
- 18. JavaScript creación de instancias de objetos
- 19. Al mover/copiar instancias de objetos C++
- 20. Hacer que Spring beans se comporte como instancias ThreadLocal para un ExecutorService
- 21. ¿Cómo se implementa la clase StringBuilder? ¿Crea internamente nuevos objetos de cadena cada vez que agregamos?
- 22. Crear lista de instancias de diferentes objetos
- 23. UISearchDisplayController no funciona cuando se crea en el código?
- 24. constructor vacío cuando se crea un servicio de
- 25. error de Padres jerárquica cuando se crea nuevo proyecto androide
- 26. JSPs que no muestran objetos del modelo en Spring
- 27. ¿Cuál es la mejor forma de compartir instancias de objetos comerciales entre aplicaciones web Java usando JBoss y Spring?
- 28. ¿Cómo obtener la dirección IP cuando se crea una sesión?
- 29. ¿Cómo gestiona la agrupación de objetos en Spring?
- 30. La colección backbone.js agrega un elemento vacío cuando se crea?
¡tienes razón! Un bean no singleton no se creará inmediatamente. +1 – nanda
Gracias skaffman, eso aclara mi duda. De modo que depende del programador decidir si un frijol debe inicializarse o inicializarse de manera lenta. Esto podría ser muy subjetivo, pero ¿podría informarme sobre las mejores prácticas seguidas en este tipo de situaciones? –
Es completamente subjetivo, sí, pero también lo es el resto de la construcción del software. Esto no es diferente Pero su posición predeterminada debe ser no perezosa y alcance predeterminado. Solo haz un frijol si tienes una muy buena razón. – skaffman