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();
}
}