This episode digs into the evolution of Spring from boring XML configuration to Spring Boot with auto-configuration and starter dependencies. You'll also understand the problems Spring Boot solves and how it compares to traditional Java development approaches.

Before Spring Boot existed, building web applications with Java was a very painful experience. In episode 1 we step back for a moment to look at the history and background of why Spring Boot was born, and the concrete problems it solves.
Understanding this history isn't just nostalgia. When you understand the root problems that gave rise to auto-configuration and starter dependencies, you'll find it easier to predict how Spring Boot behaves — and when to override its default behavior. This is a mental foundation that's extremely useful throughout the entire series.
The Spring Framework was born in 2002 as an answer to the complexity of Enterprise JavaBeans (EJB). Spring introduced the concepts we now know as dependency injection and Inversion of Control, turning Java components into simple POJOs. However, in its early days, all configuration was done through XML files that were very long and hard to maintain.
Imagine declaring every bean, the relationships between beans, transactions, and security in one giant XML file:
<beans xmlns="http://www.springframework.org/schema/beans">
<bean id="itemRepository" class="com.example.ItemRepository"/>
<bean id="itemService" class="com.example.ItemService">
<property name="repository" ref="itemRepository"/>
</bean>
<bean id="itemController" class="com.example.ItemController">
<property name="service" ref="itemService"/>
</bean>
</beans>Every time you added a new class, you had to remember to register it here. Forget once, and the application failed at runtime. This is what's called configuration boilerplate — routine work that has nothing to do with business logic.
Spring 2.5 began introducing annotation-based configuration such as @Component and @Autowired. Spring 3 added Java configuration with @Configuration and @Bean. Each iteration reduced the amount of XML you had to write. However, integrating other technologies — databases, message queues, web servers — still demanded consistent manual configuration that was easy to get wrong.
The genesis of Spring Boot happened in 2012, when Spring developers realized that the entire framework pipeline — bean creation, datasource configuration, web server setup — always repeated itself from project to project. From that realization, the concept of auto-configuration was born: Spring looks at what libraries are on the classpath, then automatically prepares sensible configuration.
Spring Boot removes almost all of the manual configuration work. Take starter dependencies — dependency bundles that Spring has already selected for your needs. A single spring-boot-starter-web dependency pulls in all the libraries needed for a web application: Spring MVC, Jackson, and embedded Tomcat.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}Notice: no version numbers are written manually. Spring Boot uses built-in dependency management so the version of every library is agreed upon and tested together — this eliminates one of the classic sources of problems in Java known as dependency hell, i.e. version conflicts between libraries.
Before Spring Boot, running an application meant installing Apache Tomcat, deploying a WAR file, and starting the server manually. Spring Boot flips this concept: Tomcat, Jetty, or Undertow are embedded directly into the application, and the application runs simply by calling the main method. The result is rapid development — one command to run, one command to test.
./mvnw spring-boot:runThe ./mvnw spring-boot:run command starts the embedded Tomcat, runs auto-configuration, and makes the application ready to accept requests within seconds. For production, the application is packaged as an executable jar that can be run with java -jar on any server with a JVM:
./mvnw clean package
java -jar target/belajar-spring-boot-0.0.1-SNAPSHOT.jarWith this single artifact, the application runs on a server, in a container, or in a CI environment without any additional installation.
To make Spring Boot's value clearer, compare the journey of building a simple web application with two approaches:
The most obvious differences are in onboarding and consistency. With Spring Boot, new developers can run their first application within minutes, and every project follows the same pattern because they're all generated from Spring Initializr.
The same habits apply across teams and libraries, so moving between Spring Boot projects feels familiar. With its massive ecosystem — hundreds of starters and polished official documentation — the learning curve stays gentle even as features keep growing.
Today Spring Boot is the de facto standard for Java backend, especially in the cloud-native era. With lightweight container support, fast-running auto-configuration, and the Spring Cloud ecosystem for distributed systems, Spring Boot has become the primary choice for building microservices. The latest releases in the Spring Boot 3.x line run on Spring Framework 6, require Java 17 and above, and support observability and native images — all topics we'll cover in the later episodes of this series.
XML config -> Annotation -> Java config -> Spring Boot 3.xThis ecosystem is also broad: Spring Data for persistence, Spring Security for authentication, Spring Cloud for microservices, and Spring Reactive for non-blocking applications. Each one will be explored in the relevant episodes.
Episode 1 provided the historical context and motivation behind Spring Boot: the framework was born to remove configuration boilerplate, unify dependency management, and accelerate Java application development with an embedded server and auto-configuration.
Key takeaways:
./mvnw spring-boot:run.In the next episode, episode 2, we'll discuss core concepts and key architecture — how it works behind the scenes: the application lifecycle, the auto-configuration mechanism with conditional beans, the role of @SpringBootApplication, the application context, DispatcherServlet, and application profiles. This is where you begin to see how Spring Boot works from the inside.