Inversion of Control and Dependency Injection - JulianeMaran32/Java-with-Spring-Boot GitHub Wiki

🧠 1. O que é Inversão de Controle (IoC)?

Imagine que você tem uma máquina de café. Normalmente, você mesmo compraria os ingredientes, colocaria tudo na máquina e prepararia o café.
Com Inversão de Controle, a lógica muda: você apenas diz que quer café, e alguém entrega tudo pronto para você.

Em termos de código:

Ao invés de você criar os objetos manualmente, o Spring cria e entrega esses objetos para você. Isso é IoC: você entrega o controle da criação dos objetos ao framework.

💉 2. O que é Injeção de Dependência (DI)?

Esse é um jeito de aplicar IoC.

“Dependência” é um objeto que sua classe precisa para funcionar.
“Injetar” significa que o Spring entrega essa dependência pronta para sua classe usar, ao invés de você mesmo criá-la.

📦 Exemplo simples com Java + Spring

Suponha que você tenha uma interface:

public interface Motor {
    void ligar();
}

E uma classe que implementa essa interface:

@Component // Spring saberá que pode gerenciar essa classe
public class MotorV8 implements Motor {
    public void ligar() {
        System.out.println("Motor V8 ligado");
    }
}

Agora, uma classe Carro que precisa de um Motor:

@Component // Spring também vai gerenciar essa classe
public class Carro {

    private final Motor motor;

    // Injeção via construtor
    @Autowired
    public Carro(Motor motor) {
        this.motor = motor;
    }

    public void dirigir() {
        motor.ligar();
        System.out.println("Carro está em movimento");
    }
}

E no seu main:

@SpringBootApplication
public class Aplicacao {

    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(Aplicacao.class, args);

        Carro carro = context.getBean(Carro.class);
        carro.dirigir();
    }
}

O que está acontecendo aqui:

  • Você não criou o objeto Motor nem o objeto Carro manualmente.
  • O Spring criou tudo pra você, conectando as peças automaticamente.
  • Isso é Inversão de Controle (quem controla a criação dos objetos é o Spring).
  • E a Injeção de Dependência foi feita via construtor (Motor motor foi injetado no Carro).