Vimos anteriormente que se puede hacer la inyección de dependencias por medio de archivos xml y usando anotaciones; sin embargo también podemos usar clases de configuración para instanciar objetos de manera fácil y limpia.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean("student")
public Student getStudent(Service service) {
return new StudentImpl(service);
}
@Bean("service")
public Service getService() {
return new ServiceImpl();
}
}
La ventaja de este método es que permite liberar a las clases de negocio de anotaciones, dejándolas limpias.
La clave es marcar la clase con el decorador @Configuration, es cual es procesado por el Spring IoC, que en este caso crea las instancias marcadas con @Bean.
Veamos un ejemplo muy básico:
- Creamos una interfaz con un método de prueba:
public interface Service { String hello(); }
- Creamos la implementación del servicio:
public class ServiceImpl implements Service { @Override public String hello() { return "Hola"; } }
- Creamos el archivo de configuración:
@Configuration public class Config { @Bean("service") public Service getService() { Service myService = new ServiceImpl(); System.out.println(myService.hello()); return myService; } }
Lo que hacemos es instanciar la implementación e imprimir en consola el String que viene del método hello, lo que resulta que al ejecutar la aplicación veamos un “hola” en consola.
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.0) Hola
Al ser una clase Java obtenemos las ventajas propias del lenguaje, como asegurarnos del tipado correcto, comprobación en tiempo de compilación y algo mas amigable para la lectura.
También si se desea, podemos usar las anotaciones en conjunto con con las clases de configuración.