DEV Community

realNameHidden
realNameHidden

Posted on • Edited on

Spring vs Spring Boot: What Are the Main Differences Every Java Developer Should Know?

A beginner-friendly guide to understanding Spring vs Spring Boot with simple analogies and real Java examples

Introduction

If you’ve ever started learning Java programming for backend development, chances are you’ve heard people casually say, “Just use Spring Boot.” But then you wonder—What about Spring? Are they the same thing?

Think of Spring and Spring Boot like cooking at home. Spring is like having raw ingredients and full control over how you cook—powerful, but time-consuming. Spring Boot, on the other hand, is like a ready-to-cook meal kit—it sets things up for you so you can focus on the final dish.

Understanding the Spring vs Spring Boot difference is crucial for beginners because it affects how fast you can build applications, how much configuration you manage, and how production-ready your app is. In this article, we’ll break things down in simple terms, with clear explanations, practical examples, and real-world use cases to help you learn Java the right way.


Core Concepts

What is Spring?

Spring Framework is a powerful, lightweight framework used to build Java applications. Its main goal is to make Java development easier by handling common concerns like dependency injection, transaction management, and security.

However, Spring gives you freedom with responsibility. You must:

  • Configure beans manually
  • Set up XML or Java-based configurations
  • Manage dependencies carefully
  • Configure servers like Tomcat explicitly

Use case:

Spring is ideal when you need fine-grained control over every part of your application or when working with legacy systems.


What is Spring Boot?

Spring Boot is built on top of Spring. It doesn’t replace Spring—it enhances it.

Spring Boot focuses on convention over configuration, meaning:

  • Sensible defaults are provided
  • Embedded servers (Tomcat, Jetty) come built-in
  • Auto-configuration reduces boilerplate code
  • Applications can run with a simple main() method

Use case:

Spring Boot is perfect for microservices, REST APIs, cloud-native apps, and rapid development.


Key Differences: Spring vs Spring Boot

Aspect Spring Spring Boot
Configuration Manual Auto-configured
Server External Embedded
Setup Time Longer Very fast
Production Ready Needs setup Built-in support
Learning Curve Steeper Beginner-friendly

In short, Spring is the foundation, and Spring Boot is the accelerator 🚀. Most modern Java applications today use Spring Boot because it dramatically improves developer productivity.


Code Examples (Java 21)

Example 1: Simple REST API Using Spring (Traditional Configuration)

// Java 21 compatible

@Configuration
@ComponentScan(basePackages = "com.example.springapp")
public class AppConfig {
}
Enter fullscreen mode Exit fullscreen mode
@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello from Spring!";
    }
}
Enter fullscreen mode Exit fullscreen mode

// Web.xml or server configuration is required separately

📌 Observation:
You must configure component scanning, server setup, and deployment manually.


Example 2: Simple REST API Using Spring Boot

// Java 21 compatible

@SpringBootApplication
public class SpringBootDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootDemoApplication.class, args);
    }
}
Enter fullscreen mode Exit fullscreen mode
@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello from Spring Boot!";
    }
}
Enter fullscreen mode Exit fullscreen mode

📌 Observation:
No XML, no server configuration, and the app runs using:

mvn spring-boot:run
Enter fullscreen mode Exit fullscreen mode

This simplicity is why Spring Boot dominates modern Java programming.


Best Practices (3–5 Tips)

  1. Start with Spring Boot if you’re a beginner
    Avoid unnecessary complexity when learning Spring vs Spring Boot.

  2. Understand Spring fundamentals first
    Knowing dependency injection and beans helps you debug Spring Boot better.

  3. Avoid over-customizing auto-configuration
    Let Spring Boot do its job unless you truly need customization.

  4. Use Spring Boot Actuator for production apps
    It provides health checks, metrics, and monitoring out of the box.

  5. Keep configurations externalized
    Use application.yml or application.properties for environment-specific settings.


Examples

Example 1: Creating a Simple REST API

👉 Same requirement, two approaches


✅ Using Spring (Traditional Spring Framework)

1️⃣ Add Dependencies (manual & verbose)

You must explicitly add Spring MVC, Jackson, Servlet API, etc.

<!-- pom.xml -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>6.1.2</version>
</dependency>
Enter fullscreen mode Exit fullscreen mode

2️⃣ Configure DispatcherServlet (Manual)

public class WebInitializer 
        extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{AppConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}
Enter fullscreen mode Exit fullscreen mode

3️⃣ Java Configuration

@Configuration
@EnableWebMvc
@ComponentScan("com.example.springapp")
public class AppConfig {
}
Enter fullscreen mode Exit fullscreen mode

4️⃣ Controller

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello from Spring!";
    }
}
Enter fullscreen mode Exit fullscreen mode

❌ What you had to do

  • Configure DispatcherServlet
  • Enable MVC manually
  • Deploy to external Tomcat
  • Manage versions yourself

✅ Using Spring Boot

Now look at the same requirement with Spring Boot 👇


1️⃣ Single Dependency (Auto-configured)

<!-- pom.xml -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
Enter fullscreen mode Exit fullscreen mode

2️⃣ Application Entry Point

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
Enter fullscreen mode Exit fullscreen mode

3️⃣ Controller (Same Code!)

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello from Spring Boot!";
    }
}
Enter fullscreen mode Exit fullscreen mode

▶️ Run the App

mvn spring-boot:run
Enter fullscreen mode Exit fullscreen mode

No server setup. No XML. No extra config.


✅ What Spring Boot did for you

  • Auto-configured DispatcherServlet
  • Embedded Tomcat
  • JSON support included
  • Sensible defaults
  • Production-ready setup

Example 2: Database Access (JPA)


❌ Spring (Manual Configuration)

You must configure:

  • DataSource
  • EntityManager
  • TransactionManager
@Bean
public DataSource dataSource() {
    DriverManagerDataSource ds = new DriverManagerDataSource();
    ds.setUrl("jdbc:h2:mem:testdb");
    ds.setUsername("sa");
    ds.setPassword("");
    return ds;
}
Enter fullscreen mode Exit fullscreen mode

Lots of boilerplate 😓


✅ Spring Boot (Auto Configuration)

application.yml

spring:
  datasource:
    url: jdbc:h2:mem:testdb
    username: sa
    password:
Enter fullscreen mode Exit fullscreen mode

Entity

@Entity
public class User {

    @Id
    @GeneratedValue
    private Long id;
    private String name;
}
Enter fullscreen mode Exit fullscreen mode

Repository

public interface UserRepository extends JpaRepository<User, Long> {
}
Enter fullscreen mode Exit fullscreen mode

👉 That’s it.
Spring Boot auto-configures:

  • DataSource
  • Hibernate
  • Transactions
  • EntityManager

🔑 Interview-Ready Summary Example

Spring gives you full control but requires manual configuration.
Spring Boot builds on Spring and removes boilerplate using auto-configuration, embedded servers, and starters.


When to Use What? (With Example)

Scenario Choose
Legacy enterprise app Spring
Microservices Spring Boot
Rapid development Spring Boot
Fine-grained control Spring
Interview / real-world projects Spring Boot

Conclusion

The debate around Spring vs Spring Boot becomes simple once you understand their roles. Spring is a powerful framework that gives you full control, while Spring Boot builds on that power by removing unnecessary setup and configuration.

If your goal is to learn Java and build real-world applications quickly, Spring Boot is the clear winner. It lets you focus on writing business logic instead of plumbing code. That said, Spring knowledge remains essential—it’s the engine running under the hood.

Whether you’re preparing for interviews, building microservices, or starting your backend journey, mastering both Spring and Spring Boot will make you a confident and effective Java developer.


Top comments (0)