MÓDULO 5 - Spring Core: IoC e DI Avançado
Bem-vindo ao Módulo 5! 🎯
Você já utilizou injeção de dependências nos módulos anteriores, mas você realmente entende como isso funciona?
Este módulo revela os segredos internos do Spring e torna você autônomo para lidar com qualquer situação de injeção de dependências.
🎓 Objetivos de Aprendizagem
Ao final deste módulo, você será capaz de:
- ✅ Explicar o que é Inversão de Controle (IoC)
- ✅ Dominar os 3 tipos de injeção de dependências
- ✅ Criar e gerenciar Beans Spring
- ✅ Utilizar os escopos apropriados (@Singleton, @Prototype, etc.)
- ✅ Configurar o Spring com @Configuration e @Bean
- ✅ Gerenciar perfis (dev, test, prod)
📚 Pré-requisitos
Antes de começar este módulo, você deve ter:
- ✅ Completado os Módulos 1 a 4
- ✅ Utilizado a injeção por construtor nos seus exercícios práticos
- ✅ Compreendido a arquitetura em 3 camadas (Controller, Service, Repository)
Se esses pré-requisitos não foram cumpridos, volte aos módulos anteriores!
🗺️ Plano do Módulo
Parte Teórica (4 capítulos)
Capítulo 1: Inversão de Controle (IoC)
Duração: 30 minutos
Conteúdo:
- O que é IoC?
- O problema do alto acoplamento
- Como o Spring resolve esse problema
- O Container Spring (ApplicationContext)
Por que é importante? Entender o princípio fundamental do Spring
Capítulo 2: Injeção de Dependências (DI)
Duração: 45 minutos
Conteúdo:
- Os 3 tipos de injeção (construtor, setter, field)
- Por que a injeção por construtor é preferida
- @Autowired, @Inject, @Resource
- Dependências opcionais
Por que é importante? Escolher o método de injeção correto
Capítulo 3: Beans e Contexto Spring
Duração: 45 minutos
Conteúdo:
- O que é um Bean?
- @Component, @Service, @Repository, @Controller
- @Bean e @Configuration
- Nomeação de beans
- @Qualifier e @Primary
Por que é importante? Dominar a criação e o gerenciamento de objetos Spring
Capítulo 4: Escopos e Configuração
Duração: 45 minutos
Conteúdo:
- Escopos: @Singleton, @Prototype
- Escopos web: @RequestScope, @SessionScope
- Configuração Java vs XML
- Perfis (@Profile) para dev/test/prod
- @ComponentScan
Por que é importante? Controlar o ciclo de vida e a configuração
Parte Prática (3 TPs)
TP5.1: Injeção de Dependências Avançada
Duração: 1h30
Objetivo: Dominar os diferentes tipos de injeção
Você irá criar:
- Vários serviços com diferentes métodos de injeção
- Gerenciar dependências circulares
- Utilizar @Qualifier para escolher a implementação
TP5.2: Beans e Escopos
Duração: 1h30
Objetivo: Compreender os escopos e seu impacto
Você irá criar:
- Beans com diferentes escopos
- Testar @Singleton vs @Prototype
- Criar beans personalizados com @Bean
TP5.3: Configuração por Perfis
Duração: 1h30
Objetivo: Gerenciar múltiplos ambientes
Você irá criar:
- Configuração para dev, test, prod
- Beans condicionais conforme o perfil
- application-{profile}.properties
📊 Duração Total
| Tipo | Duração |
|---|---|
| Teoria | 2h45 (4 capítulos) |
| Prática | 4h30 (3 TPs) |
| Total | 7h15 (~2-3 sessões) |
🎯 O Que Você Vai Compreender
Antes deste Módulo
// Você escrevia isso sem realmente entender:
@Service
public class MyService {
private final MyRepository repo;
public MyService(MyRepository repo) {
this.repo = repo;
}
}
Perguntas sem resposta:
- Por que @Service?
- Como o Spring sabe que deve criar MyRepository?
- Por que injeção por construtor?
- Quando esses objetos são criados?
Depois deste Módulo
// Você vai entender TUDO:
@Service // ← Spring gerencia este bean (singleton por padrão)
public class MyService {
private final MyRepository repo; // ← Imutável (boa prática)
// ← Injeção por construtor (recomendado)
public MyService(MyRepository repo) {
this.repo = repo; // ← Spring injeta automaticamente
}
}
Você saberá:
- ✅ Como o Spring cria e gerencia os objetos
- ✅ Quando usar @Component, @Service, @Repository
- ✅ Como gerenciar múltiplas implementações
- ✅ Como configurar para diferentes ambientes
- ✅ Os diferentes escopos e sua utilidade
🚀 Por Que Este Módulo É Importante
1. Compreender os fundamentos
O Spring Boot "esconde" muita complexidade com sua auto-configuração. Isso é ótimo para começar rápido, mas você precisa entender o que acontece "por baixo do capô".
Exemplo concreto:
Erro comum: "No qualifying bean of type X found"
Sem este módulo: 😰 Você procura no StackOverflow
Com este módulo: 😎 Você entende e resolve o problema em 2 minutos
2. Escrever Código Profissional
Desenvolvedores juniores copiam código sem entender.
Desenvolvedores seniores entendem e adaptam conforme o contexto.
Este módulo faz você evoluir de júnior para sênior em Spring Core.
3. Preparação para Entrevistas
Perguntas sobre IoC, DI e beans Spring são extremamente frequentes em entrevistas técnicas.
Perguntas típicas:
- "Explique Inversão de Controle"
- "Qual a diferença entre @Component e @Bean?"
- "Quando usar @Qualifier?"
- "Explique os escopos dos beans"
Após este módulo, você terá todas as respostas!
🗺️ Progressão na Formação
Módulo 1: Introdução ao Spring Boot
Módulo 2: Primeiros Passos (Initializr, Estrutura, Config)
Módulo 3: Arquitetura em 3 Camadas
Módulo 4: Bancos de Dados Produção
Módulo 5: ← VOCÊ ESTÁ AQUI - Spring Core (IoC/DI)
Compreender as fundações
Módulo 6: Spring Data JPA Avançado
Módulo 7+: Conceitos avançados
Módulo 5 = O momento em que você REALMENTE entende o Spring!
📖 Como Abordar Este Módulo
Teoria ANTES da Prática
-
Leia os 4 capítulos teóricos na ordem
- Não pule nenhum capítulo
- Faça anotações
- Teste os pequenos exemplos
-
Faça os TPs na ordem
- TP5.1: Injeção
- TP5.2: Beans e Escopos
- TP5.3: Configuração
-
Revise o resumo de cada capítulo
Tempo Recomendado
Opção Intensiva (1 final de semana):
- Sábado de manhã: Capítulos 1 e 2 + TP5.1
- Sábado à tarde: Capítulo 3 + TP5.2
- Domingo de manhã: Capítulo 4 + TP5.3
- Domingo à tarde: Revisão e exercícios
Opção Progressiva (2 sessões):
- Sessão 1: Capítulos 1-2 + TP1
- Sessão 2: Capítulos 3-4 + TP5.2 e TP5.3
✅ Autoavaliação
Antes de começar, responda:
- Você sabe o que significa IoC? ☐ Sim ☐ Não
- Você conhece os 3 tipos de injeção? ☐ Sim ☐ Não
- Você entende a diferença entre @Component e @Bean? ☐ Sim ☐ Não
- Você sabe o que é um escopo de bean? ☐ Sim ☐ Não
Se você respondeu "Não" a qualquer uma das perguntas → Este módulo é para você!
Após o módulo, refaça este teste. Você deverá responder "Sim" para TUDO!
🎯 Próximo Passo
Pronto para entender Spring a fundo?
➡️ Comece pelo Capítulo 1: Inversão de Controle