Spring MVC vs Spring Boot

Both Spring MVC and Spring Boot are essential components of the Spring Framework used in Java web development. However, they serve different purposes and have distinct characteristics. Let's explore the differences between Spring MVC and Spring Boot.

Difference Between Spring MVC and Spring Boot

1. Purpose: 

Spring MVC: Spring MVC (Model-View-Controller) is a web framework within the Spring Framework that facilitates the development of web applications based on the MVC design pattern. It provides components for building web applications, including controllers, views, and models. 

Spring Boot: Spring Boot is an opinionated framework built on top of the Spring Framework. Its primary purpose is to simplify and streamline the process of setting up and configuring Spring-based applications, including Spring MVC applications, by providing default configurations and sensible defaults. 

2. Configuration: 

Spring MVC: In Spring MVC, developers need to manually configure various components, such as servlets, view resolvers, and data sources, by writing XML or Java-based configuration files. 

Spring Boot: Spring Boot emphasizes convention over configuration. It automatically configures most components based on the project's classpath and dependencies. Developers can customize the configuration by modifying specific properties. 

3. Dependency Management: 

Spring MVC: In a Spring MVC project, developers need to manage dependencies manually by specifying them in the project's build file (e.g., Maven or Gradle) and handling version compatibility. 

Spring Boot: Spring Boot provides dependency management through its "starter" dependencies. Developers can include specific starters for technologies they want to use, and Spring Boot will handle the dependency versions and configurations. 

4. Embedded Server: 

Spring MVC: Spring MVC applications need to be deployed on external servlet containers like Tomcat or Jetty. 

Spring Boot: Spring Boot applications come with an embedded servlet container (Tomcat, Jetty, or Undertow) by default. It allows you to run the application as a standalone JAR without the need for an external container. 

5. Auto-configuration: 

Spring MVC: Spring MVC does not provide automatic configuration. Developers need to explicitly configure the components and beans required for the application to function. 

Spring Boot: Spring Boot's major advantage is its auto-configuration feature. It automatically configures various components based on the classpath, which significantly reduces boilerplate configuration code. 

6. Opinionated vs. Non-opinionated: 

Spring MVC: Spring MVC is a non-opinionated framework, which means it provides flexibility but requires developers to make more decisions and write more code to set up the application. 

Spring Boot: Spring Boot is an opinionated framework that aims to reduce configuration and development efforts by making assumptions about sensible defaults. This can speed up development but might limit flexibility in certain cases.

Summary - Difference Between Spring MVC and Spring Boot

Spring MVC Spring Boot
Spring MVC is a framework that is used to build web applications. It follows the Model-View-Controller design pattern. Spring Boot is not a framework to write applications, but it simplifies the setup and development of Spring applications.
In Spring MVC, developers need to do all configurations manually. This may include view resolver setup, component scan, dispatcher servlet setup, etc. Spring Boot provides automatic configuration, which eliminates most of the boilerplate configuration required by Spring MVC.
To run a Spring MVC application, developers need to have a Servlet container or application server such as Tomcat, Jetty, etc. Spring Boot applications can include an embedded Servlet container (like Tomcat or Jetty) so they can be run as standalone applications without needing a separate server.
In Spring MVC, dependency management is a manual task. The developer needs to know which dependencies to include. Spring Boot simplifies dependency management by providing a set of starters. These are a set of convenient dependency descriptors which greatly simplify Maven configuration.
Testing a Spring MVC application requires setting up testing configurations manually. Spring Boot makes it easy to test applications with its Spring Boot Test module which includes an embedded database for testing, Mock objects, and Test utilities.
Developers need to manually define and configure properties files in Spring MVC. In Spring Boot, application.properties or application.yml in the classpath are automatically recognized and used without any additional configuration.
In Spring MVC, developers have to manually manage the application for production-ready. Spring Boot provides features like health checks, metrics, etc. out of the box to create production-ready applications.