Kotlin + Spring Boot — 148 lessons
Kotlin with Spring Boot & Gradle
Learn Spring Boot and Gradle by building. Every Spring challenge embeds a hand-rolled mini-Spring (a reflection-based DI container + REST router + in-memory repository), so the @Service/@RestController/@Bean code you write genuinely wires and runs right in the IDE — graded by test cases.
Chapter 1 · Gradle & the build
Step 1Gradle is a task graphStep 2Dependencies & the dependency treeStep 3Configurations: which deps land on which classpathStep 4Initialization, configuration, executionStep 5Plugins: tasks, extensions, conventionsStep 6Source sets: main, test, and their classpathsStep 7Version catalogs: one source of truth for versionsStep 8Multi-module builds & project dependencies
Chapter 2 · Spring core — IoC & dependency injection
Step 11Inversion of Control & the containerStep 12Stereotypes: @Component, @Service, @Repository, @RestControllerStep 13@Configuration classes & @Bean factory methodsStep 14@Value & Environment property injectionStep 15@Profile for environment-specific beansStep 16Bean lifecycle: singleton scope & @PostConstructStep 17Why constructor injectionStep 18The ApplicationContext as the bean registry
Chapter 3 · Spring web — REST controllers & services
Chapter 4 · Data — repositories & persistence
Chapter 5 · Testing & production
Chapter 6 · AOP & cross-cutting concerns
Chapter 7 · Spring Security
Chapter 8 · Events & messaging
Chapter 9 · Caching, scheduling & resilience
Chapter 10 · API design & observability
Chapter 11 · Data access with JDBC
Chapter 12 · JPA & Hibernate (ORM)
Chapter 13 · Spring Data JPA & REST
Chapter 14 · Web MVC & Thymeleaf
Chapter 15 · REST API mastery
Chapter 16 · Spring Security in depth
Chapter 17 · JWT & OAuth2
Chapter 18 · Spring AI
Chapter 19 · Microservices
Chapter 20 · Deployment — Docker & AWS
Chapter 21 ·
Chapter 22 ·
Step 211Standard error bodies with ProblemDetailStep 212@ManyToMany and the join tableStep 213Transaction propagation & read-onlyStep 214Optimistic locking with @VersionStep 215Reactive controllers with coroutinesStep 216Custom Bean Validation constraintsStep 217Choosing among many beans: @Primary, @Qualifier, @LazyStep 218Conditional beans: @ConditionalOnProperty & @ConditionalOnMissingBeanStep 219Background work with @AsyncStep 220Calling other APIs with RestClient