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");
}
}
main
:
E no seu @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 objetoCarro
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 noCarro
).