A curated, opinionated path from zero to production-grade Java and Spring Boot — refreshed for Java 25 (LTS) and Spring Boot 4 / Spring Framework 7.
Whether you're writing your first main method or hardening a microservice for production, this repo maps what to learn, in what order, with the best free resource for each step. Every link is hand-picked; the roadmap is kept current with the modern Java platform (records, sealed types, pattern matching, virtual threads) and the Spring Boot 3/4 generation.
flowchart TD
A["1 · Java Fundamentals"] --> B["2 · Object-Oriented Programming"]
B --> C["3 · Core APIs & Intermediate Java"]
C --> D["4 · Modern Java (14 → 25)"]
D --> E["5 · Advanced Java & the JVM"]
C --> F["6 · Testing"]
E --> G["7 · Clean Code, SOLID & Design Patterns"]
F --> G
C --> H["8 · Build Tools"]
G --> I["9 · Databases & Persistence"]
I --> J["10 · Jakarta EE & Servlets"]
J --> K["11 · Spring Framework & Spring Boot"]
H --> K
K --> L["12 · Cloud-Native, Microservices & Spring AI"]
L --> M["13 · Practice, Projects & Roadmaps"]
- Follow the chapters in order if you're new — each builds on the last.
- Jump to a chapter if you're filling gaps (the roadmap above shows dependencies).
- Look for these markers on individual resources:
- 🎥 video · 📖 deep-read / official docs · ⚡ quick reference · 🧪 hands-on · ⭐ start here · 🆕 modern (Java 17+ / Spring Boot 3+)
- LTS-first mindset: target Java 21 or Java 25 and Spring Boot 4.x for anything new. Older material is still valuable for concepts — just prefer modern syntax when you code.
- Fundamentals of Java
- Object-Oriented Programming
- Core APIs & Intermediate Java
- Modern Java (14 → 25)
- Advanced Java & the JVM
- Testing
- Clean Code, SOLID & Design Patterns
- Build Tools
- Databases & Persistence
- Jakarta EE & Servlets
- Spring Framework & Spring Boot
- Cloud-Native, Microservices & Spring AI
- Practice, Projects & Roadmaps
Goal: read, write, and run simple Java programs. Understand types, control flow, and errors.
⭐ Start here: dev.java — the official learning portal from Oracle · The Java Tutorials (Oracle)
- Primitive Data Types in Java
- 📖 Primitive Data Types (Oracle Tutorial)
- 🆕
var— Local Variable Type Inference (Java 10+)
- Java Control Structures
- Convention: avoid
!inifconditions - The
switchStatement - 🆕 Switch Expressions (Java 14+) · see also Chapter 4
- String vs. StringBuilder vs. StringBuffer
- Guide to the Java String API
- 🆕 Text Blocks — multi-line strings (Java 15+)
- Exception Handling in Java
- Checked vs. Unchecked Exceptions
throwvs.throws- Creating a Custom Exception
Goal: model problems with classes and objects; master the four pillars.
- Object-Oriented Programming in Java
- Concrete Classes
- 9 Rules About Constructors in Java
- Everything You Need to Know About Interfaces
- Abstract Class vs. Interface
- Access Modifiers Explained
- Access Modifiers with Examples
- What Is Inheritance
- 12 Rules & Examples About Inheritance
- Inheritance vs. Composition (prefer composition!)
- What Is Overloading
- 12 Rules of Overriding
- Overriding vs. Overloading
- Covariant Return Types
- Method Hiding
- Default & Private Methods in Interfaces
- Static & Default Methods in Interfaces
- The
thisKeyword - Type Casting
- The
staticKeyword - The
finalKeyword - Static Blocks
- Static Imports
- Pass-by-Value vs. Pass-by-Reference in Java
- Wrapper Classes & Autoboxing
- JavaBeans
- What Is a JavaBean, exactly? (StackOverflow)
- POJO Classes
- A Guide to Java Enums
- Overriding
toString() - The
equals()andhashCode()Contracts BigDecimalandBigInteger- Java Serialization
- Everything About Java Serialization
- Why implement
Serializable? (StackOverflow) - 🆕 Records — concise immutable data carriers (Java 14+)
Goal: fluently use the standard library — collections, generics, streams, and functional Java.
Fig: Collections Framework hierarchy. Source: javatpoint
List
- List Tutorial & Examples
- Sorting Lists
- Sorting a List by Multiple Attributes
- Convert an Iterator to a List
- Get a Random Element from a List
- Partition a List
- Remove All Nulls from a List
- Remove Duplicates from a List
- Check If Two Lists Are Equal
- Find an Element in a List
UnsupportedOperationExceptionon Lists- Copy a List to Another List
- Remove All Occurrences of a Value
- Add Multiple Items to an ArrayList
- Remove the First Element
- Ways to Iterate Over a List
- Intersection of Two Lists
- Count Duplicate Elements in an ArrayList
- Differences Between Two Lists
- Reversing a Linked List
- Assert Two Lists Equal Ignoring Order
Set
Map
- Guide to HashMap
- HashMap Under the Hood
- Guide to TreeMap
- TreeMap vs. HashMap
- Store Duplicate Keys in a Map
- Initialize a HashMap
- Merge Two Maps (Java 8)
- Sort a HashMap
- Compare Two HashMaps
- Using
Map.Entry - Working with Maps Using Streams
- Iterate Over a Map
Conversions & utilities
- Convert Between an Array and a List
- Convert Between an Array and a Set
- Convert Between a List and a Set
- Convert a Map to an Array, List or Set
- Convert a List to a Map
- Map to String Conversion
Arrays.asListvs.new ArrayList(Arrays.asList())- Collect Stream Elements into a List
stream().forEach()vs.forEach()- A Guide to the Java Iterator
- Time Complexity of Java Collections
- 🆕 Sequenced Collections (Java 21+)
- ⭐ Lambda Expressions Quick Start (Oracle)
- Functional Interfaces in Java
- Java Streams Explained (JRebel)
- A Comprehensive Guide to Java Streams
- Java Streams by Example (Capital One)
- A Guide to Java Collectors
- 🎥 Streams — video series (Java Brains)
- 🧪 Modern Java by Example (winterbe/java8-tutorial)
- 🆕 Stream Gatherers — custom intermediate ops (Java 24+)
- Java Reflection Tutorial (Jenkov)
- A Guide to Java Reflection
- 📖 Annotations (Oracle Tutorial)
- Common Java Annotations
- 🎥 Creating a Custom Annotation (video)
- Java Annotation Processing
- Annotations (winterbe)
@DeprecatedExamples@OverrideExamples@SuppressWarningsExamples- Annotation Processing Under the Hood
Goal: write idiomatic modern Java. These features define how professional code looks today — favour them over legacy patterns.
- 🆕 Records — immutable data classes
- 🆕 Sealed Classes & Interfaces — controlled hierarchies
- 🆕 Pattern Matching for
instanceof - 🆕 Pattern Matching for
switch - 🆕 Record Patterns — destructuring
- 🆕 Text Blocks — multi-line string literals
- 🆕 Switch Expressions
- 🆕
var— Local Variable Type Inference - 🆕 Sequenced Collections
LTS releases (bold) are what you should target for production: Java 8, 11, 17, 21, 25.
- Java 8 — lambdas, streams,
Optional, new Date/Time - Java 9 — modules (JPMS),
varin the REPL, collection factory methods - Java 10 —
varlocal type inference - Java 11 — HTTP Client,
Stringmethods, run single-file source - Java 12 · Java 13 · Java 14 — switch expressions, records (preview), text blocks (preview)
- Java 15 — text blocks, sealed classes (preview)
- Java 16 — records & pattern matching for
instanceoffinalized - Java 17 — sealed classes finalized; migration guide 8 → 17
- Java 18 — UTF-8 by default, simple web server
- Java 21 — virtual threads, pattern matching for
switch, record patterns, sequenced collections - Java 22 — stream gatherers (preview), unnamed variables
- Java 25 — 🆕 latest LTS: scoped values, compact source files & instance
main, structured concurrency - 📖 Full JDK release/JEP index (OpenJDK)
Goal: reason about concurrency and understand what happens beneath your code.
- Java Thread Programming — all 14 parts (foojay)
- The
synchronizedKeyword - The
volatileKeyword (Jenkov) CompletableFuture- 📖 Concurrency (Oracle Tutorial)
- Synchronization & Locks (MIT 6.005)
- ReentrantReadWriteLock
- ExecutorService (Jenkov)
- Thread Pools
- ThreadPoolExecutor Example
- Fork/Join Framework
- ⭐ Difference Between Thread and Virtual Thread
- OpenJDK Project Loom
- Structured Concurrency
- Scoped Values (a modern alternative to
ThreadLocal) - Working with Virtual Threads in Spring
- JVM Garbage Collectors
- Experimental Garbage Collectors (ZGC, Shenandoah)
- Java Memory Management (interview-grade deep dive)
- Object Ordering:
Comparable&Comparator - Collections & Thread Safety
- 18 Collections & Generics Best Practices
extends/superWildcards & the Get-Put Principle- Generics, Subtyping & the Substitution Principle
- Static vs. Non-Static
- Upcasting & Downcasting
Goal: a habit, not a chore. Modern Java hiring assumes you can write clean, fast, isolated tests.
- ⭐ A Guide to JUnit 5
- Assertions in JUnit 4 and JUnit 5
- Assert an Exception Is Thrown
- Introduction to AssertJ — fluent assertions
- Mockito Series — basics to advanced
- Mockito with JUnit 5 (
@ExtendWith) - JUnit vs. Mockito — what each is for
- Docker Test Containers in Java Tests
- DB Integration Tests with Spring Boot & Testcontainers
- Built-in Testcontainers Support in Spring Boot (3.1+)
- 📖 Testcontainers — official site
- Testing in Spring Boot (see also Chapter 11.10)
Goal: write code other humans (and future-you) can change safely.
- ⭐ Refactoring Guru — Design Patterns (illustrated)
- Design Patterns Series (Baeldung)
- Design Principles & Patterns for Highly Concurrent Applications
- 📖 Refactoring Guru — Refactoring Catalog
Goal: build, test, and package projects reproducibly. Learn one deeply, know the other.
- Use the Maven/Gradle Wrapper — always commit
mvnw/gradlewso builds are reproducible.
Goal: move data in and out of a relational database, the Java way.
- Introduction to JDBC
- JPA Tutorial
- Learn JPA & Hibernate Series
- The DAO Pattern in Java
- Connection Pooling with HikariCP
- Database Migrations with Flyway
Spring's persistence layer (Spring Data JPA,
JdbcTemplate) is covered in Chapter 11.9.
Goal: understand the web foundation Spring MVC is built on. Note: the
javax.*namespace is nowjakarta.*(Jakarta EE 9+).
- 🎥 What Is Apache Tomcat?
- What Is a Servlet?
- Lifecycle of a Servlet
- How a Servlet Works
- ServletContext
- Servlet Filters
- What Is a WAR File?
- 🎥 Introduction to Servlets (video)
- Intro to Servlets (Baeldung)
- MVC with Servlets & JSP
Goal: build production REST services with Spring Boot 4 / Spring Framework 7. Target Boot 4.x for new work (Boot 3.5 reached end of open-source support on 30 June 2026).
⭐ Start here: Learn Spring Boot Series (Baeldung) · 📖 Spring Boot Reference Docs · 🧪 start.spring.io — bootstrap a project
- 📖 Spring Framework Overview (current reference)
- Why Choose Spring?
- 🆕 Spring Boot 3 & Spring Framework 6.0 — What's New
- 🆕 Spring Boot 4 & Spring Framework 7 — What's New
- ⭐ Understanding the Core of the Spring Framework
- Spring Bean
- Inversion of Control & Dependency Injection
- What Is Dependency Injection?
@Autowired— Autowiring- Spring Bean Annotations
- Field vs. Constructor vs. Setter Injection (StackOverflow)
@Resource,@Inject&@Autowired@Componentvs.@Bean(StackOverflow)- Circular Dependencies in Spring
UnsatisfiedDependencyException- Bean Scopes
- ⭐ Spring MVC Tutorial
- The DispatcherServlet
- How
@RequestMappingWorks (StackOverflow) - Spring vs. Spring Boot
- 🧪 Building an Application with Spring Boot (official guide)
@RequestMapping@RequestParam@Controllervs.@RestController- View Resolvers
- 🧪 Serving Web Content (official guide)
- 🎥 Spring Framework — video course (Java Brains)
- ⭐ REST with Spring Series
- Building a RESTful Web Service (Java config)
- 🧪 Building a RESTful Web Service (official guide)
- Spring Profiles (JavaDevJournal)
- Spring Profiles (Baeldung)
- The
@ValueAnnotation - Type-safe
@ConfigurationProperties
- ⭐ Testing in Spring Boot
- See also the general Testing chapter (JUnit 5, Mockito, Testcontainers).
Spring Security 6 uses the lambda DSL and requires the
jakarta.*namespace — many older tutorials are out of date, so prefer the resources below.
- ⭐ Security with Spring Series
- Spring Boot Security Auto-Configuration
- 📖 Spring Security Reference Docs
- 🎥 Spring Security — video series (LinuxTex)
- Guide to Spring WebFlux
- Handling Errors in Spring WebFlux
- Reactor WebFlux vs. Virtual Threads — which to choose
Goal: take a service beyond
localhost— package it, distribute it, observe it, and add AI.
- ⭐ Spring AI — project home
- 📖 Spring AI Reference — Getting Started
- Getting Started with Model Context Protocol (MCP)
Goal: knowledge only sticks when you build. Pick a track and ship something.
- ⚡ dev.java — official Java resources & guides
- ⚡ Baeldung — full Java & Spring catalogue
- 📖 Official Java SE API Docs
- 📖 Spring Guides — task-focused tutorials
Progress from small to production-shaped:
- CLI to-do app — collections, file I/O, exception handling.
- REST API for a bookstore — Spring Boot, Spring Data JPA, validation, exception handling, tests.
- Secured multi-user API — add Spring Security (JWT), profiles, and Testcontainers integration tests.
- Dockerized microservice — containerize it, add Actuator health checks and observability.
- AI-assisted feature — add a Spring AI chat/summarize endpoint backed by a model.
Spotted a dead link, an out-of-date resource, or a missing modern topic? Contributions are very welcome:
- Open an issue describing the fix or the resource you'd add (with a short note on why it's good).
- Or submit a pull request — keep link descriptions concise, prefer up-to-date sources, and place the link in the right chapter.
Great additions: modern-Java resources, hands-on tutorials, and anything that replaces an outdated link with a current one.
Maintained for educational purposes. Curated for Java 25 (LTS) and Spring Boot 4 / Spring Framework 7. Last updated: July 18, 2026.
