fbpx

@Configuration & @Bean en SPRING BOOT

La anotación Spring @Configuration es parte del marco Spring Core. La anotación Spring Configuration indica que la clase tiene métodos de definición de @Bean. Entonces, el contenedor Spring puede procesar la clase y generar Spring Beans para usar en la aplicación.

Video explicativo

La anotación Spring @Configuration nos permite usar anotaciones para la inyección de dependencia. Comprendamos cómo crear clases de configuración de Spring. Vamos a crear una clase de bean Java simple.

public class Version {
    private final int major;
    private final int minor;
    private final int revision;

    public Version(final int major, final int minor, final int revision) {
        this.major = major;
        this.minor = minor;
        this.revision = revision;
    }

    @Override
    public String toString() {
        return major + "." + minor + "." + revision;
    }
}

Ahora si tenemos nuestra clase con la anotación @Configuration, podemos crear un método que devuelva nuestra clase que queremos guardar en el contexto de Spring:


@Configuration
public class AppConfig {

    @Bean
    public Version version() {
        return new Version(1, 0, 0);
    }

}

En está clase le estamos indicando a Spring que nuestra clase con la anotación @Configuration será una clase encargada de crear beans a través de sus métodos marcados con la anotación @Bean.

Esto puede ser bastante útil ya que si queremos crear una instancia de una clase externa y no podemos usar la anotación @Component ya que el código no es accesible desde nuestro proyecto, podremos crearla gracias a la anotación @Configuration y @Bean. Para ver un ejemplo de ello vamos a crear una instancia de HttpClient que se encuentra dentro del JDK:

@Configuration
public class AppConfig {

    @Bean
    public Version version() {
        return new Version(1, 0, 0);
    }

    @Bean
    public HttpClient httpClient(){
        return HttpClient.newBuilder()
                .build();
    }

    @Bean
    public HttpClient httpClient2(){
        return HttpClient.newBuilder()
                .build();
    }

}