Full Changelog: 1.3...1.4
Reestruturação pedagógica
GraalVM Native Image foi movido do módulo 2.2 (Maven e Gradle) para o 8.3 (JVM
Internals), onde agora aparece depois do conteúdo sobre ClassLoader, JIT e ciclo de
vida de objetos — o contexto que o estudante precisa para entender por que o AOT
existe e por que reflexão não declarada gera ClassNotFoundException em tempo de build.
No 2.2, ficou uma nota explicando a decisão e apontando para 8.3.
Virtual Threads foi consolidado no 3.4. A seção detalhada em 3.1 foi substituída por
um parágrafo de orientação com cross-reference explícita, eliminando a sobreposição de
carrier threads e mounting/unmounting que aparecia em dois lugares.
Pontes entre Design Patterns e Spring
O 5.3 (Spring Security) agora explica que o SecurityFilterChain é Chain of
Responsibility antes de mostrar o código de configuração. O 7.1 (Design Patterns) foi
reescrito para conectar explicitamente o que o estudante já construiu —
ProdutoRepository, injeção de dependência, Filter Chain — com os padrões formais que
está aprendendo.
Novos módulos criados
5.6 - Resiliência com Resilience4j: Circuit Breaker com estados
(CLOSED/OPEN/HALF_OPEN), Retry com backoff exponencial e jitter, Bulkhead, combinação
dos três padrões, monitoramento via Actuator, e um exemplo completo de serviço com
resiliência em produção.
5.7 - Cache com Redis: @Cacheable, @CacheEvict, @cACHEpUT, configuração de
serialização com Jackson, RedisTemplate para acesso de baixo nível, testes com
Testcontainers, e o que não cachear.
5.8 - Versionamento de APIs: quatro estratégias (URL, header, Content Negotiation,
query param) com trade-offs reais, política de deprecação com headers Sunset e
Deprecation, estrutura de projeto para múltiplas versões, e introdução ao spec-first
com OpenAPI.
Estilo e correções
Jackson agora abre com exceções reais de produção em vez de definição genérica. CI/CD
substituiu os cinco bullets sem argumento por dois parágrafos explicando o mecanismo
causal. O diagrama de observabilidade em 6.4 perdeu os emojis. O README perdeu "Bora
codar!" e a afirmação não-fundamentada de que Cursor é "a melhor ferramenta".