Spring 和 SpringBoot 的區(qū)別詳解
Spring是一個一站式的輕量級的java開發(fā)框架,核心是控制反轉(zhuǎn)(IOC)和面向切面(AOP),針對于開發(fā)的WEB層(SpringMvc)、業(yè)務(wù)層(Ioc)、持久層(JdbcTemplate)等都提供了多種配置解決方案和基礎(chǔ)的架構(gòu)支持。
它包含一些很好的功能,如依賴注入和開箱即用的模塊,如:Spring JDBC、Spring MVC、Spring Security、Spring AOP、Spring ORM、Spring Test。
這些模塊可以大大縮短應(yīng)用程序的開發(fā)時間。例如,在Java Web開發(fā)的早期階段,我們需要編寫大量的重復代碼來將記錄插入到數(shù)據(jù)源中。
但是通過使用Spring JDBC模塊的JDBCTemplate,我們可以將它簡化為只需幾個簡單配置或者幾行代碼。
SpringBoot框架相對于SpringMvc框架來說,更專注于開發(fā)微服務(wù)后臺接口,當然也通過Template等支持前端開發(fā),同時遵循默認優(yōu)于配置,簡化了插件配置流程,不需要配置xml,相對springmvc,大大簡化了配置流程。
以下是Spring Boot中的一些功能:
通過starter這一個依賴,以簡化構(gòu)建和復雜的應(yīng)用程序配置。
可以直接main函數(shù)啟動,嵌入式web服務(wù)器,避免了應(yīng)用程序部署的復雜性,Metrics度量,Helth check健康檢查和外部化配置。
盡可能的自動化配置Spring功能。
Spring 與 Spring Boot 的核心區(qū)別主要體現(xiàn)在以下三方面:
定位與目標
Spring是一個功能全面的 Java開發(fā)框架 ,提供依賴注入、面向切面編程、事務(wù)管理、數(shù)據(jù)訪問等模塊化支持,開發(fā)者可根據(jù)需求選擇組件。Spring Boot則是基于Spring的擴展,專注于簡化配置流程,通過自動配置和約定優(yōu)于配置的原則,減少手動配置工作量,快速構(gòu)建獨立生產(chǎn)級應(yīng)用。
項目初始化
使用Spring需手動創(chuàng)建Maven/Gradle項目,添加多個依賴(如spring-web、spring-mvc等),并配置web.xml文件。Spring Boot僅需添加spring-boot-starter-web依賴,無需XML配置文件,簡化初始化流程。 ?34核心特性
Spring通過控制反轉(zhuǎn)(IoC)和依賴注入(DI)實現(xiàn)模塊化開發(fā),需手動配置組件。Spring Boot沿用這些核心思想,但通過內(nèi)嵌服務(wù)器(如Tomcat)、自動配置默認值等方式,進一步降低部署門檻,使開發(fā)者更專注于業(yè)務(wù)邏輯而非基礎(chǔ)設(shè)施配置。
Spring Boot與Spring有什么區(qū)別?
Spring Boot是基于Spring的框架,旨在簡化Spring應(yīng)用的初始搭建及開發(fā)過程。主要區(qū)別包括:
1、自動配置: Spring Boot自動配置項目,簡化了配置過程。
2、獨立運行: Spring Boot應(yīng)用可以獨立運行,不需要外部Servlet容器。
3、內(nèi)嵌服務(wù)器: 提供內(nèi)嵌的Tomcat、Jetty或Undertow服務(wù)器。
4、無需XML配置: Spring Boot減少了對XML配置的依賴,更多使用注解和Java配置。
5、微服務(wù)支持: 為構(gòu)建微服務(wù)提供了強大的支持。
首先 在認識一個東西之前我們先來試著回答三個經(jīng)典的問題問題,是什么?為什么?怎么樣?
一.SpringBoot是什么?
在介紹 SpringBoot 之前我們首先來簡單介紹一下 Spring。Spring 是誕生于2002年的 Java 開發(fā)框架,可以說已經(jīng)成為 Java 開發(fā)的事實標準。所謂事實標準就是雖然 Java 官方?jīng)]有說它就是開發(fā)標準,但是在當前 Java 開發(fā)的眾多項目中,當我們談到產(chǎn)品級的 Java 項目的時候,大多都是基于 Spring 或者應(yīng)用了 Spring 特性的。
Spring 基于 IOC 和 AOP 兩個特性對 Java 開發(fā)本身進行了大大的簡化。但是一個大型的項目需要集成很多其他組件,比如一個 WEB 項目,至少要集成 MVC 框架、Tomcat 這種 WEB 容器、日志框架、ORM框架,連接數(shù)據(jù)庫要選擇連接池吧……使用 Spring 的話每集成一個組件都要去先寫它的配置文件,比較繁瑣且容易出錯。
然后就有了SpringBoot。
Spring Boot 是由 Pivotal 團隊提供的全新框架,2014 年 4 月發(fā)布 Spring Boot 1.0 2018 年 3 月 Spring Boot 2.0發(fā)布。它是對spring的進一步封裝,其設(shè)計目的是用來簡化 Spring 應(yīng)用的初始搭建以及開發(fā)過程。怎么簡化的呢?就是通過封裝、抽象、提供默認配置等方式讓我們更容易使用。
SpringBoot 基于 Spring 開發(fā)。SpringBoot 本身并不提供 Spring 框架的核心特性以及擴展功能,也就是說,它并不是用來替代 Spring 的解決方案,而是和 Spring 框架緊密結(jié)合用于提升 Spring 開發(fā)者體驗的工具。
關(guān)于 SpringBoot 有一句很出名的話就是約定大于配置。采用 Spring Boot 可以大大的簡化開發(fā)模式,它集成了大量常用的第三方庫配置,所有你想集成的常用框架,它都有對應(yīng)的組件支持,例如 Redis、MongoDB、Jpa、kafka,Hakira 等等。SpringBoot 應(yīng)用中這些第三方庫幾乎可以零配置地開箱即用,大部分的 SpringBoot 應(yīng)用都只需要非常少量的配置代碼,開發(fā)者能夠更加專注于業(yè)務(wù)邏輯。
二.SpringBoot為什么出現(xiàn)?
為什么會產(chǎn)生 SpringBoot 呢?
剛才說 SpringBoot 簡化了基于 Spring 開發(fā),這只是最直觀的一方面,事實上 SpringBoot 的誕生有它所處的大時代背景這個原因在里面的,那就是微服務(wù),這也是談 SpringBoot 必談微服務(wù)的原因。
2014年一個叫 Martin Fowler (同時也是經(jīng)典著作《重構(gòu):改善既有代碼的設(shè)計》一書的作者)發(fā)表了一篇關(guān)于微服務(wù)的博客,比較形象生動地介紹了什么是微服務(wù),然后微服務(wù)才慢慢被人所熟知。他說微服務(wù)其實是一種架構(gòu)風格,我們在開發(fā)一個應(yīng)用的時候這個應(yīng)用應(yīng)該是由一組小型服務(wù)組成,每個小型服務(wù)都運行在自己的進程內(nèi);小服務(wù)之間通過HTTP的方式進行互聯(lián)互通。和微服務(wù)相對應(yīng)的就是我們之前的,單體應(yīng)用,就是大名鼎鼎的 all in one 的風格。這種風格把所有的東西都寫在一個應(yīng)用里面,比如我們熟悉的OA,CRM,ERP系統(tǒng),所有的頁面,所有的代碼都放在一起,打成打成一個war包,然后把war包放在Tomcat容器中運行。
Spring Boot本身并不提供Spring框架的核心特性以及擴展功能,只是用于快速、敏捷地開發(fā)新一代基于Spring 框架的應(yīng)用程序。同時它集成了大量常用的第三方庫配置(如 Redis、MongoDB、JP A、RabbitMQ、Quartz等),Spring Boot 應(yīng)用中這些第三方庫幾乎可以零配置進行開箱即用,大部分的Spring Boot應(yīng)用都只需要非常少量的配置代碼,開發(fā)者能夠更加專注于業(yè)務(wù)邏輯。
這種傳統(tǒng)web開發(fā)的架構(gòu)模式當然也有它的優(yōu)勢,比如它測試部署比較簡單,因為不涉及到多個服務(wù)的互聯(lián)互調(diào),只需要把一個包上傳到服務(wù)器就行了,可以說是一人吃飽全家不餓。同樣也不會給運維帶來麻煩,方便水平擴展,只需要又把相同的應(yīng)用復制多份放在不同的服務(wù)器中就達到了擴展的目的。
單體應(yīng)用的的缺點也顯而易見,容易牽一發(fā)而動全身,比如要更改一個小小的功能,就可能需要重新部署整個應(yīng)用。當然,更大的挑戰(zhàn)就是日益增長的用戶需求。
三:為什么學習 Spring Boot
使用 Spring Boot 開發(fā)項目,有以下幾方面優(yōu)勢∶
Spring Boot 使開發(fā)變得簡單,提供了豐富的解決方案,快速集成各種解決方案提升開發(fā)效率。
Spring Boot 使配置變得簡單,提供了豐富的 Starters,集成主流開源產(chǎn)品往往只需要簡單的配置即可。
Spring Boot 使部署變得簡單,其本身內(nèi)嵌啟動容器,僅僅需要一個命令即可啟動項目,結(jié)合Jenkins、Docker 自動化運維非常容易實現(xiàn)。
Spring Boot 使監(jiān)控變得簡單,自帶監(jiān)控組件,使用 Actuator輕松監(jiān)控服務(wù)各項狀態(tài)。
從軟件發(fā)展的角度來講,越簡單的開發(fā)模式越流行,簡單的開發(fā)模式解放出更多生產(chǎn)力,讓開發(fā)人員可以避免將精力耗費在各種配置、語法所設(shè)置的門檻上,從而更專注于業(yè)務(wù)。這點上,Spring Boot已盡可能地簡化了應(yīng)用開發(fā)的門檻。Spring Boot 所集成的技術(shù)棧,涵蓋了各大互聯(lián)網(wǎng)公司的主流技術(shù),跟著 Spring Boot 的路線去學習,基本可以了解國內(nèi)外互聯(lián)網(wǎng)公司的技術(shù)特點。
四:Spring Boot 特點:
1. 獨立運行的 Spring 項目
Spring Boot 可以以 jar 包的形式獨立運行,Spring Boot 項目只需通過命令“ java–jar xx.jar” 即可運行。
2. 內(nèi)嵌 Servlet 容器
Spring Boot 使用嵌入式的 Servlet 容器(例如 Tomcat、Jetty 或者 Undertow 等),應(yīng)用無需打成 WAR 包 。
3. 提供 starter 簡化 Maven 配置
Spring Boot 提供了一系列的“starter”項目對象模型(POMS)來簡化 Maven 配置。
4. 提供了大量的自動配置
Spring Boot 提供了大量的默認自動配置,來簡化項目的開發(fā),開發(fā)人員也通過配置文件修改默認配置。
5. 自帶應(yīng)用監(jiān)控
Spring Boot 可以對正在運行的項目提供監(jiān)控。
6. 無代碼生成和 xml 配置
Spring Boot 不需要任何 xml 配置即可實現(xiàn) Spring 的所有配置。