Anotación @Lazy

¿Qué es?

Es una anotación de Spring que nos permite posponer la creación de beans, de tal forma que éstos sólo se crearán cuando se vayan a utilizar, en lugar de crearlos al iniciar la aplicación.

Ésto nos puede servir en aplicaciones que tienen funcionalidades muy grandes y tardan en cargar y así optimizar el tiempo de arranque y el uso inicial de recursos.

¿Cómo funciona?

Por defecto, Spring crea los beans cuando se inicializa la aplicación, independientemente de si se van a utilizar o no. Esto se llama eager loading y hace que se reserven recursos para estos componentes.

Cuando se aplica la anotación @Lazy, el bean no se crea durante el inicio del aplicativo, sino cuando se va a invocar por primera vez. Este comportamiento se conoce como lazy loading.

Ejemplo:

Supongamos que tenemos un componente que requiere de muchos recursos y/o necesita mucho tiempo para inicializarse y no siempre es necesario instanciarlo porque no se utiliza de forma habitual. 

Como no queremos que se instancie durante el arranque de la aplicación, la anotamos con la anotación @Lazy.

Anotación @Lazy.

En este ejemplo, el bean HeavyService no se creará durante el arranque de la aplicación, sino solo cuando se invoque por primera vez:

También en la clase que tenga como dependencia el componente, habrá que ponerle la anotacion @Lazy cuando se inyecte la dependencia.

Anotación @Lazy cuando se inyecta la dependencia.

Si el método useHeavyService de la clase MyComponent no es llamado, el servicio HeavyService nunca se creará.

useHeavyService en @Lazy

Uso a nivel de clase y a nivel de método

La anotación @Lazy se puede utilizar a dos niveles.

  • A nivel de clase: Si se aplica a una clase (como en el ejemplo anterior), esa clase solo se instanciará cuando sea necesario.

A nivel de método: También se puede aplicar a métodos de configuración en clases anotadas con @Configuration para que los beans definidos en esos métodos se creen solo cuando se soliciten:

La anotación @Lazy se puede utilizar a dos niveles.

Consideraciones

  • Componentes críticos: No es recomendable usar esta anotación en beans que son críticos para el funcionamiento de la aplicación o que tienen que estar cargados inmediatamente al inicio de la aplicación.
  • Dependencias cíclicas: Posponer la carga de los beans puede dificultar la resolución de dependencias cíclicas, al no verse en el arranque de la aplicación.

Conclusión

En este artículo hemos visto qué es y cómo funciona la anotación @Lazy en Spring, así como las consideraciones a tener en cuenta al usarla.

Dejamos un pequeño proyecto implementando el uso de esta anotación en nuestro repositorio de GitLab.

<span style="font-size:80%">Autor </span><a href="https://blog.kairosds.com/author/andresgonzalez/" target="_self">Andrés González</a>

Autor Andrés González

Nov 4, 2024

Otros artículos

Deceye – Turning transparency into depth

Deceye – Turning transparency into depth

¿DeFi? ¿DAOs? ¿En qué consiste eso? ¿Qué papel juegan? El ecosistema DeFi, Decentralized Finances, en castellano Finanzas Descentralizadas, engloba a todos aquellos servicios financieros que gracias a la tecnología blockchain pueden evitar la intermediación que ofrece...

Colecciones Kotlin

Colecciones Kotlin

¿Qué son las colecciones Kotlin? Una colección suele contener varios objetos del mismo tipo (este número también puede ser cero). Así mismo, los objetos de una colección se denominan “elements” o “ítems”. Las listas son colecciones ordenadas con acceso a elementos...