Aula 03 - Injeção de Dependências e IoC 💉
Nesta aula, vamos entender o conceito mais fundamental do Spring: como ele gerencia os objetos da sua aplicação para você, através da Inversão de Controle.
😊 Inversão de Controle (IoC)
Tradicionalmente, seu código cria seus próprios objetos com new. Com Inversão de Controle (IoC), é o framework que cria e entrega os objetos prontos para você — você só declara que precisa deles.
O Container Spring
O Spring gerencia um "container" de objetos chamados Beans. Um Bean é qualquer objeto cuja criação e ciclo de vida são controlados pelo Spring.
📊 Fluxo de Injeção de Dependências
graph LR
Container[Container Spring - IoC] -- Injeta --> Controller[Controller]
Container -- Injeta --> Service[Service]
Controller -- Depende de --> Service 🧠 A Anotação @Autowired
Important
@Autowired diz ao Spring: "injete aqui uma instância pronta deste tipo, eu não vou criá-la com new".
@Service
public class ProdutoService {
public String listar() {
return "Lista de produtos";
}
}
@RestController
public class ProdutoController {
@Autowired
private ProdutoService produtoService; // Injetado pelo Spring
// O Spring já entrega o ProdutoService pronto para uso aqui
}
🧠 Por que Isso Importa?
Tip
Injeção de dependências facilita muito os testes (Aula 11): em vez de depender de uma implementação real, você pode "injetar" uma versão falsa (mock) do Service durante os testes.
📝 Exercícios Progressivos
- Básico: O que significa a sigla IoC?
- Básico: O que é um "Bean" no contexto do Spring?
- Intermediário: Qual a diferença entre criar um objeto com
newe deixar o Spring injetá-lo? - Intermediário: Por que a Injeção de Dependências facilita a escrita de testes automatizados?
- Desafio: Pesquise a diferença entre injeção via
@Autowiredem atributo e injeção via construtor — qual é considerada a melhor prática hoje?
🚀 Mini-projeto: Crie uma classe SaudacaoService com um método saudar(). Injete-a em um Controller usando @Autowired e chame o método a partir dele.