📊 Capítulo 02: Injeção de Dependências & Scopes
Especialização Backend com Java 21 & Spring Boot 3
🗺️ O Mecanismo de Inversão de Controle (IoC)
flowchart TD
CONFIG["@Configuration / @Bean"] --> CONTAINER["Spring IoC Container"]
STEREO["Estereótipos (@Component, @Service, @Repository, @Controller)"] --> CONTAINER
CONTAINER --> DI["Injeção por Construtor (Recomendado / Imutável com final)"]
DI --> SCOPE{"Escopo do Bean"}
SCOPE --> |"Singleton (Padrão)"| SINGLE["1 Instância Global por Container"]
SCOPE --> |"Prototype"| PROTO["Nova Instância a cada getBean() / Injeção"]
SCOPE --> |"Request / Session"| WEB["Vinculado ao Ciclo de Vida HTTP"]
style CONFIG fill:#ede7f6,stroke:#512da8,stroke-width:2px
style STEREO fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
style CONTAINER fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style DI fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style SINGLE fill:#c8e6c9,stroke:#2e7d32,stroke-width:1.5px
style PROTO fill:#ffebee,stroke:#d32f2f,stroke-width:1.5px
style WEB fill:#fff9c4,stroke:#fbc02d,stroke-width:1.5px
🎯 Slide 1: Injeção por Construtor vs @Autowired em Atributo
-
Injeção em Atributo (
@Autowired private Service s): Dificulta testes unitários, não permite camposfinale mascara acoplamentos fortes. - Injeção por Construtor (Padrão Ouro Moderno):
@Service public class PedidoService { private final PedidoRepository repository; public PedidoService(PedidoRepository repository) { this.repository = repository; } }
- Benefícios: Imutabilidade, facilidade com Mockito e inicialização explícita e segura.
🎯 Slide 2: Anotações de Estereótipo e Semântica
-
@Component: O bloco fundamental genérico gerenciado pelo IoC. -
@Service: Indica componentes que encapsulam regras de negócio puras. -
@Repository: Componentes de acesso a dados (habilita tradução automática de exceções de banco paraDataAccessException). @Configuration&@Bean: Para registrar bibliotecas externas de terceiros.
🎯 Slide 3: Ciclo de Vida & Escopos de Beans
-
Singleton (Default): Compartilhado por todas as threads da aplicação (deve ser stateless e thread-safe!).
-
Prototype: Uma nova instância independente a cada ponto de injeção.
- Callbacks de Ciclo de Vida:
@PostConstruct(pós-injeção de dependências) e@PreDestroy(encerramento gracioso).
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim