En Spring Boot, la anotación @Autowired agrega, automáticamente mediante injection, las dependencian de otros componentes. Esta anotación es utilizada para ‘inyectar’ una instancia de una clase dentro de otra clase.
Que es @Autowired en Spring Boot
@Autowired es una anotación utilizada en Spring Boot para habilitar la inyección automática de dependencias.
Permite al contenedor de Spring proporcionar una instancia de una dependencia requerida cuando se crea un bean. Esta anotación puede utilizarse en campos, constructores y métodos para que Spring proporcione las dependencias automáticamente.
La inyección de dependencias es un patrón de diseño en el que a los objetos se les pasan sus dependencias en lugar de crearlas internamente.
En Spring Boot, @Autowired
se utiliza para inyectar objetos en otros objetos. Esto permite un acoplamiento suelto entre componentes y ayuda a mantener el código más mantenible.
Ejemplo de @Autowired
Veamos un ejemplo de cómo utilizar la anotación @Autowired
.
Tenemos una clase CarService
que necesita una instancia de EngineService
para funcionar correctamente.
Esta puede ser inyectada en la clase CarService
usando la anotación @Autowired
.
@Service
public class CarService {
@Autowired
private EngineService engine;
public void drive() {
engine.start();
}
}
La anotación @Autowired especifica que el contenedor Spring debe suministrar el EngineService a la clase CarService.
Cuando el contenedor cree la instancia CarService, inyectará automáticamente la instancia EngineService
en la clase CarService
.
Ten en cuenta que para que @Autowired
funcione, necesitas haber configurado correctamente el contexto de la aplicación Spring Boot con los beans necesarios definidos.
Puedes definir beans anotando clases con @Component
, @Service
, @Repository
, @Controller
, o @Bean
.
Uso de @Autowired en Campos Privados
Los campos privados se pueden anotar con @Autowired
para que Spring inyecte una dependencia en el campo.
Aquí Spring utiliza reflection para acceder internamente a la clase e inyectar el componente en el campo.
@Service
public class CarService {
@Autowired
private EngineService engine;
public void drive() {
engine.start();
}
}
Uso de @Autowired en Constructores
Los constructores también se pueden anotar con @Autowired
para que Spring inyecte la dependencia en la clase.
Inyectar por constructores es el uso recomendado sobre las otras formas de usar Autowired.
@Service
public class CarService {
private final EngineService engine;
@Autowired
public CarService(EngineService engine) {
this.engine = engine;
}
public void drive() {
engine.start();
}
}
También de esta forma:
@Service
public class CarService {
private final EngineService engine;
public CarService(@Autowired EngineService engine) {
this.engine = engine;
}
public void drive() {
engine.start();
}
}
Uso de @Autowired en métodos Set
Los métodos Set también se pueden anotar con @Autowired
para que Spring inyecte la dependencia en la clase.
@Service
public class CarService {
private EngineService engine;
@Autowired
public void setEngine(EngineService engine) {
this.engine = engine;
}
public void drive() {
engine.start();
}
}
El parámetro ‘required’ en @Autowired
Por defecto, con la anotacion @Autowired
la dependencia es requerida.
Pero podriamos indicar que NO es requerida, por lo que Spring dejará null la dependencia.
@Service
public class CarWithNotRequiredService {
@Autowired(required = false)
private EngineService engine; // This could be null !
public void drive() {
if (Objects.isNull(engine)) { // prevent null pointer
System.out.println("Engine is null!");
}else {
engine.start();
}
}
}
Conclusión
@Autowired es una anotación utilizada en Spring Boot para utilizar inyección automática de dependencias en clases que necesitan otros componentes.
Permite al contenedor de Spring proporcionar una instancia de una dependencia necesaria cuando se crea un componente. Esta anotación se puede utilizar en campos, constructores y métodos, así como con el atributo “required” para indicar si una dependencia es necesaria o no.
This code is in GitHub Spring Boot Code examples