La anotación @Configuration en Spring Boot se utiliza para indicar que una clase define uno o más beans que serán gestionados por el contenedor de IoC de Spring. Esta es una forma moderna de configurar aplicaciones Spring, reemplazando configuraciones basadas en XML.
Las clases marcadas con @Configuration permiten definir beans de manera explícita usando métodos anotados con @Bean. Esto ofrece un control más detallado sobre cómo se crean y configuran los objetos de la aplicación.
@Configuration en Spring Boot?
Cuando el contenedor de Spring detecta una clase con @Configuration, la trata como una fuente de definiciones de beans. Los métodos dentro de esta clase que están anotados con @Bean se ejecutan para crear y registrar esos beans en el contexto de la aplicación.
@Configuration
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public Motor motor() {
return new Motor("V8");
}
@Bean
public Vehiculo vehiculo() {
return new Vehiculo(motor());
}
}
En este ejemplo:
1. La clase AppConfig está anotada con @Configuration.
2. Define dos beans: Motor y Vehiculo.
3. La dependencia entre los beans se resuelve directamente llamando al método motor() dentro de vehiculo().
@Configuration
| Anotación | Descripción |
|---|---|
@Configuration
|
Indica que la clase contiene definiciones de beans y configuraciones. |
@Bean
|
Marca un método para definir un bean administrado por Spring. |
@ComponentScan
|
Escanea paquetes para detectar clases anotadas con @Component, @Service, etc.
|
@PropertySource
|
Carga propiedades desde un archivo de configuración externo. |
@Configuration
Spring Boot permite usar @Configuration junto con propiedades externas para configurar beans dinámicamente:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Value("${vehiculo.nombre}")
private String vehiculoNombre;
@Bean
public Vehiculo vehiculo() {
return new Vehiculo(vehiculoNombre);
}
}
En este ejemplo, el valor de vehiculo.nombre se carga desde el archivo application.properties.
Para más información, consulta la documentación oficial de Spring.
Jorge García
Fullstack developer