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

¿Por qué es crucial utilizar Locale?

¿Por qué es crucial utilizar Locale?

Por Andrés González Introducción En los últimos años me he enfrentado a proyectos en los cuales se necesitaban que las aplicaciones fueran multi idioma, lo cual hacía fundamental realizar un buen tratamiento de los datos que los usuarios introducían. Por eso, voy...

Hilos virtuales VS Hilos tradicionales en Java 21

Hilos virtuales VS Hilos tradicionales en Java 21

Por Mariya Pomitun Hilos Virtuales vs Hilos Tradicionales: Un Análisis de Rendimiento en Java 21 En el entorno empresarial actual, donde la demanda de servicios digitales crece de forma exponencial, la capacidad de una aplicación para gestionar eficientemente miles de...