---
# System prepended metadata

title: Spring，Spring MVC，Spring Boot 三者比較
tags: [Spring boot, Spring MVC, Spring]

---

# Spring，Spring MVC，Spring Boot 三者比較

### <font color='red'>Spring</font>
說到Spring，一般指代的是Spring Framework，它是一個開源的應用程式框架，提供了一個簡易的開發方式，通過這種開發方式，將避免那些可能致使程式碼變得繁雜混亂的大量的業務/工具物件，說的更通俗一點就是由框架來幫你管理這些物件，包括它的建立，銷燬等，比如基於Spring的專案裡經常能看到的Bean。

Spring IOC提供的如通過單例減少建立無用的物件，通過延遲載入優化初始化成本等。

當然，Spring 的核心功能遠不知這些，如：
Spring AOP
Spring JDBC
Spring MVC
Spring ORM
Spring JMS
Spring Test

其實不通過Spring框架依然可以實現這些功能特定，但是Spring 提供了更優雅的抽象介面以方便對這些功能的組裝，同時又給予每個具體實現以靈活的配置；另外，基於Spring，你可以方便的與其他框架進行整合，如hibernate。

### <font color='red'>Spring MVC</font>
Spring MVC提供了一種輕度耦合的方式來開發web應用。
Spring MVC是Spring的一個模組，一個web框架。通過Dispatcher Servlet、ModelAndView 和 View Resolver，包括前端檢視開發、檔案配置、後臺介面邏輯開發等，XML、config等配置相對比較繁瑣複雜；解決的問題領域是網站應用程式或者服務開發——URL路由、Session、模板引擎、靜態Web資源等等。

SpringMVC是基於Spring的一個MVC框架，用以替代初期的SSH框架;(Spring Framework本身沒有Web功能，Spring MVC使用WebApplicationContext類擴充套件ApplicationContext，使得擁有web功能)。

### <font color='red'>Spring Boot</font>
Spring Boot只是一個配置工具，整合工具，輔助工具。
Spring Boot只是擴展了Spring framework，實現自動配置，降低專案搭建的複雜度。
Spring Boot框架相對於Spring MVC框架來說，更專注於開發微服務後臺介面，不開發前端檢視。
Spring框架需要進行大量的配置，Spring Boot引入自動配置的概念，讓專案設定變得很容易。Spring Boot本身並不提供Spring框架的核心特性以及擴充套件功能，只是用於快速、敏捷地開發新一代基於Spring框架的應用程式。也就是說，它並不是用來替代Spring的解決方案，而是和Spring框架緊密結合用於提升Spring開發者體驗的工具。同時它整合了大量常用的第三方庫配置(例如Jackson, JDBC, Mongo, Redis, Mail等等)，Spring Boot應用中這些第三方庫幾乎可以零配置的開箱即用(out-of-the-box)，大部分的Spring Boot應用都只需要非常少量的配置程式碼，使開發者能夠更加專注於業務邏輯。

Spring Boot提供的一些功能
> 1. 固定的’starter’依賴(dependency)來更簡單地組建應用設定
> 2. 植入伺服器來避免複雜的系統佈置
> 3. 衡量、運作生命確認、外部化設定
> 4. 針對Spring各式套件自動化組建設置-只要有可能

在Spring Boot中，你會發現你引入的所有包都是starter形式，如：
> spring-boot-starter-web-services，針對SOAP Web Services
> spring-boot-starter-web，針對Web應用與網路介面
> spring-boot-starter-jdbc，針對JDBC
> spring-boot-starter-data-jpa，基於hibernate的持久層框架
> spring-boot-starter-cache，針對快取支援

:::info
Starters是一系列及其方便的依賴描述，通過在你的專案中包含這些starter，你可以一站式獲得你所需要的服務，而無需像以往那樣copy各種示例配置及程式碼，然後除錯，真正做到開箱即用；比如你想使用Spring JPA進行資料操作，只需要在你的專案依賴中引入spring-boot-starter-data-jpa即可
:::


### <font color='red'>三者關係圖</font>
SpringMVC < Spring < Spring Boot
![](https://i.imgur.com/WNdquPf.png)
![](https://i.imgur.com/S9xdsD2.png)


### <font color='red'>總結：</font>
Spring MVC和Spring Boot都屬於Spring。
Spring MVC 是基於Spring的一個 MVC 框架，
Spring Boot 是基於Spring的一套快速開發整合包。

Spring 就像一個大家族，有眾多衍生產品例如 Boot，Security，JPA等等。但他們的基礎都是Spring 的 IOC 和 AOP，IOC提供了依賴注入的容器，而AOP解決了面向切面的程式設計，在此兩者的基礎上實現了其他衍生產品的高階功能；

Spring MVC是基於 Servlet 的一個 MVC 框架，主要解決 WEB 開發的問題，因為 Spring 的配置非常複雜，各種xml，properties處理起來比較繁瑣。

於是為了簡化開發者的使用，Spring社群創造性地推出了Spring Boot，它遵循約定優於配置，極大降低了Spring使用門檻，但又不失Spring原本靈活強大的功能。

Spring 最初利用“工廠模式”（DI）和“代理模式”（AOP）解耦應用元件。大家覺得挺好用，於是按照這種模式搞了一個MVC框架（一些用Spring解耦的元件），用來開發web應用，最終形成了SpringMVC。然後有發現每次開發都寫很多樣板程式碼，為了簡化工作流程，於是開發出了一些“懶人整合包”（starter），這套就是 Spring Boot。


資料來源:
[Spring，Spring MVC，Spring Boot 三者比较](https://www.cnblogs.com/feng9exe/p/11266782.html)
[Spring 與Spring Boot比較](https://medium.com/@wadegggg13/spring-%E8%88%87spring-boot%E6%AF%94%E8%BC%83-29b5f9f501d6)
[Spring、SpringMVC和SpringBoot看这一篇就够了](https://cloud.tencent.com/developer/article/1665045)


###### tags: `Spring` `Spring MVC` `Spring boot`