15 de marzo de 2020

Configuración Java: Anotaciones @Configuration y @Bean

Hasta ahora hemos visto dos formas de añadir dependencias pero recordemos que hay tres. En esta entrada vamos a ver la que nos queda: Configuración Java.

Para ello vamos a usar tres cosas:
  1. La primera ya la hemos visto: el escaneo de componentes. Nos vamos a crear una clase de configuración llamada JavaConfig (el nombre no tiene porqué ser este y podemos tener varias clases de configuración). Esta clase estará el en paquete es.lanyu.datosdeportivosapi para que sea escaneada por Spring
  2. La segunda hemos visto a un hermano suyo: marcar la clase para ser autodetectada. En este caso en vez de usar la anotación @Component usamos la anotación @Configuration, pero el concepto es el mismo.
  3. La tercera es otra anotación que sirve para indicar que el objeto devuelto en un método es un bean que debe ser cargado en el contenedor: @Bean. Además voy a añadir el nombre "config" a esta anotación para desambiguar el bean. Se hace igual que hicimos con @Component.
El código con todo esto quedaría:
package es.lanyu.datosdeportivosapi;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JavaConfig {

    @Bean(name="config")
    public Test miTest() {
        Test test = new Test() {
            int llamadas = 0;
            
            @Override
            public void init() {
                System.out.printf("Llamado %s veces", ++llamadas);
                System.out.println();
            }
            
        };
        test.init();
        
        return test;
    }
}
NOTA: también puede ponerse simplemente @Bean("config")

He sobrescrito el método init() para que quede claro que por defecto los beans son singleton y que se crea un objeto que es cargado en nuestro contenedor y se devuelve siempre el mismo, no se genera uno nuevo usando su código para generarlo. Así cuando recuperamos el bean con nombre "config" y volvemos a llamar al método init() se ve claramente que es la segunda vez que se le llama, lo que demuestra que me está devolviendo el mismo objeto que se creó:
test = context.getBean("config", Test.class);
test.init();}
La salida por consola es:

...
Llamado 1 veces
...
Llamado 2 veces
...

Puedes encontrar el código hasta este punto en su repositorio y ver el video del webinar.


Lo siguiente que haremos será pasar a usar Spring Boot y veremos cómo se hace todo lo hecho hasta ahora usándolo.

No hay comentarios:

Publicar un comentario

Compárteme

Entradas populares