Spring Boot Anotación @Autowired

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.

Spring Boot Autowired

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

Hi! If you find my posts helpful, please support me by inviting me for a coffee :)

Ver también