0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SpringBoot為什么出現(xiàn)?

jf_78858299 ? 來源:CSDN ? 作者:林在閃閃發(fā)光 ? 2023-04-07 14:39 ? 次閱讀

一.SpringBoot是什么?

在介紹 SpringBoot 之前我們首先來簡(jiǎn)單介紹一下 Spring。Spring 是誕生于2002年的 Java 開發(fā)框架,可以說已經(jīng)成為 Java 開發(fā)的事實(shí)標(biāo)準(zhǔn)。所謂事實(shí)標(biāo)準(zhǔn)就是雖然 Java 官方?jīng)]有說它就是開發(fā)標(biāo)準(zhǔn),但是在當(dāng)前 Java 開發(fā)的眾多項(xiàng)目中,當(dāng)我們談到產(chǎn)品級(jí)的 Java 項(xiàng)目的時(shí)候,大多都是基于 Spring 或者應(yīng)用了 Spring 特性的。

Spring 基于 IOC 和 AOP 兩個(gè)特性對(duì) Java 開發(fā)本身進(jìn)行了大大的簡(jiǎn)化。但是一個(gè)大型的項(xiàng)目需要集成很多其他組件,比如一個(gè) WEB 項(xiàng)目,至少要集成 MVC 框架、Tomcat 這種 WEB 容器、日志框架、ORM框架,連接數(shù)據(jù)庫(kù)要選擇連接池吧……使用 Spring 的話每集成一個(gè)組件都要去先寫它的配置文件,比較繁瑣且容易出錯(cuò)。

然后就有了SpringBoot。

Spring Boot 是由 Pivotal 團(tuán)隊(duì)提供的全新框架,2014 年 4 月發(fā)布 Spring Boot 1.0 2018 年 3 月 Spring Boot 2.0發(fā)布。它是對(duì)spring的進(jìn)一步封裝,其設(shè)計(jì)目的是用來簡(jiǎn)化 Spring 應(yīng)用的初始搭建以及開發(fā)過程。怎么簡(jiǎn)化的呢?就是通過封裝、抽象、提供默認(rèn)配置等方式讓我們更容易使用。

SpringBoot 基于 Spring 開發(fā)。SpringBoot 本身并不提供 Spring 框架的核心特性以及擴(kuò)展功能,也就是說,它并不是用來替代 Spring 的解決方案,而是和 Spring 框架緊密結(jié)合用于提升 Spring 開發(fā)者體驗(yàn)的工具。

關(guān)于 SpringBoot 有一句很出名的話就是約定大于配置。采用 Spring Boot 可以大大的簡(jiǎn)化開發(fā)模式,它集成了大量常用的第三方庫(kù)配置,所有你想集成的常用框架,它都有對(duì)應(yīng)的組件支持,例如 Redis、MongoDB、Jpa、kafka,Hakira 等等。SpringBoot 應(yīng)用中這些第三方庫(kù)幾乎可以零配置地開箱即用,大部分的 SpringBoot 應(yīng)用都只需要非常少量的配置代碼,開發(fā)者能夠更加專注于業(yè)務(wù)邏輯。

二.SpringBoot為什么出現(xiàn)?

為什么會(huì)產(chǎn)生 SpringBoot 呢???剛才說 SpringBoot 簡(jiǎn)化了基于 Spring 開發(fā),這只是最直觀的一方面,事實(shí)上 SpringBoot 的誕生有它所處的大時(shí)代背景這個(gè)原因在里面的,那就是微服務(wù),這也是談 SpringBoot 必談微服務(wù)的原因。??2014年一個(gè)叫 Martin Fowler (同時(shí)也是經(jīng)典著作《重構(gòu):改善既有代碼的設(shè)計(jì)》一書的作者)發(fā)表了一篇關(guān)于微服務(wù)的博客,比較形象生動(dòng)地介紹了什么是微服務(wù),然后微服務(wù)才慢慢被人所熟知。他說微服務(wù)其實(shí)是一種架構(gòu)風(fēng)格,我們?cè)陂_發(fā)一個(gè)應(yīng)用的時(shí)候這個(gè)應(yīng)用應(yīng)該是由一組小型服務(wù)組成,每個(gè)小型服務(wù)都運(yùn)行在自己的進(jìn)程內(nèi);小服務(wù)之間通過HTTP的方式進(jìn)行互聯(lián)互通。和微服務(wù)相對(duì)應(yīng)的就是我們之前的,單體應(yīng)用,就是大名鼎鼎的 all in one 的風(fēng)格。這種風(fēng)格把所有的東西都寫在一個(gè)應(yīng)用里面,比如我們熟悉的OA,CRM,ERP系統(tǒng),所有的頁面,所有的代碼都放在一起,打成打成一個(gè)war包,然后把war包放在Tomcat容器中運(yùn)行。

Spring Boot本身并不提供Spring框架的核心特性以及擴(kuò)展功能,只是用于快速、敏捷地開發(fā)新一代基于Spring 框架的應(yīng)用程序。同時(shí)它集成了大量常用的第三方庫(kù)配置(如 Redis、MongoDB、JP A、RabbitMQ、Quartz等),Spring Boot 應(yīng)用中這些第三方庫(kù)幾乎可以零配置進(jìn)行開箱即用,大部分的Spring Boot應(yīng)用都只需要非常少量的配置代碼,開發(fā)者能夠更加專注于業(yè)務(wù)邏輯。

這種傳統(tǒng)web開發(fā)的架構(gòu)模式當(dāng)然也有它的優(yōu)勢(shì),比如它測(cè)試部署比較簡(jiǎn)單,因?yàn)椴簧婕暗蕉鄠€(gè)服務(wù)的互聯(lián)互調(diào),只需要把一個(gè)包上傳到服務(wù)器就行了,可以說是一人吃飽全家不餓。同樣也不會(huì)給運(yùn)維帶來麻煩,方便水平擴(kuò)展,只需要又把相同的應(yīng)用復(fù)制多份放在不同的服務(wù)器中就達(dá)到了擴(kuò)展的目的。

單體應(yīng)用的的缺點(diǎn)也顯而易見,容易牽一發(fā)而動(dòng)全身,比如要更改一個(gè)小小的功能,就可能需要重新部署整個(gè)應(yīng)用。當(dāng)然,更大的挑戰(zhàn)就是日益增長(zhǎng)的用戶需求。

三:為什么學(xué)習(xí) Spring Boot

使用 Spring Boot 開發(fā)項(xiàng)目,有以下幾方面優(yōu)勢(shì)∶

  • Spring Boot 使開發(fā)變得簡(jiǎn)單,提供了豐富的解決方案,快速集成各種解決方案提升開發(fā)效率。
  • Spring Boot 使配置變得簡(jiǎn)單,提供了豐富的 Starters,集成主流開源產(chǎn)品往往只需要簡(jiǎn)單的配置即可。
  • Spring Boot 使部署變得簡(jiǎn)單,其本身內(nèi)嵌啟動(dòng)容器,僅僅需要一個(gè)命令即可啟動(dòng)項(xiàng)目,結(jié)合Jenkins、Docker 自動(dòng)化運(yùn)維非常容易實(shí)現(xiàn)。
  • Spring Boot 使監(jiān)控變得簡(jiǎn)單,自帶監(jiān)控組件,使用 Actuator輕松監(jiān)控服務(wù)各項(xiàng)狀態(tài)。

從軟件發(fā)展的角度來講,越簡(jiǎn)單的開發(fā)模式越流行,簡(jiǎn)單的開發(fā)模式解放出更多生產(chǎn)力,讓開發(fā)人員可以避免將精力耗費(fèi)在各種配置、語法所設(shè)置的門檻上,從而更專注于業(yè)務(wù)。這點(diǎn)上,Spring Boot已盡可能地簡(jiǎn)化了應(yīng)用開發(fā)的門檻。Spring Boot 所集成的技術(shù)棧,涵蓋了各大互聯(lián)網(wǎng)公司的主流技術(shù),跟著 Spring Boot 的路線去學(xué)習(xí),基本可以了解國(guó)內(nèi)外互聯(lián)網(wǎng)公司的技術(shù)特點(diǎn)。

四:Spring Boot 特點(diǎn):

\\1. 獨(dú)立運(yùn)行的 Spring 項(xiàng)目

Spring Boot 可以以 jar 包的形式獨(dú)立運(yùn)行,Spring Boot 項(xiàng)目只需通過命令“ java–jar xx.jar” 即可運(yùn)行。

\\2. 內(nèi)嵌 Servlet 容器

Spring Boot 使用嵌入式的 Servlet 容器(例如 Tomcat、Jetty 或者 Undertow 等),應(yīng)用無需打成 WAR 包 。

\\3. 提供 starter 簡(jiǎn)化 Maven 配置

Spring Boot 提供了一系列的“starter”項(xiàng)目對(duì)象模型(POMS)來簡(jiǎn)化 Maven 配置。

\\4. 提供了大量的自動(dòng)配置

Spring Boot 提供了大量的默認(rèn)自動(dòng)配置,來簡(jiǎn)化項(xiàng)目的開發(fā),開發(fā)人員也通過配置文件修改默認(rèn)配置。

\\5. 自帶應(yīng)用監(jiān)控

Spring Boot 可以對(duì)正在運(yùn)行的項(xiàng)目提供監(jiān)控。

\\6. 無代碼生成和 xml 配置

Spring Boot 不需要任何 xml 配置即可實(shí)現(xiàn) Spring 的所有配置。

五.SpringBoot怎么樣

介紹了一大堆,那 SpringBoot 的開箱即用是怎么體現(xiàn)的呢。

SpringBoot 官方推薦的構(gòu)建應(yīng)用的方式是使用 Spring Initializr,直接在網(wǎng)頁上選擇好構(gòu)建工具、語言、SpringBoot 版本,填好自己的項(xiàng)目名和初始依賴,然后點(diǎn)Generate 按鈕,就能下載一個(gè)構(gòu)建好的工程的zip包,只需要把這個(gè)包解壓之后導(dǎo)入IDE就可以了。

這已經(jīng)是一個(gè)包含依賴的、完整的、可獨(dú)立運(yùn)行的springboot應(yīng)用了!你所需要做的就是往里面填充自己的業(yè)務(wù)代碼!

當(dāng)然,如果能直接使用IDE來進(jìn)行上述操作可以讓這個(gè)過程變得更順滑。如果你使用的是 IDEA 商業(yè)版的話,新建工程的時(shí)候直接有 Spring 的選項(xiàng);如果是IDEA社區(qū)版的話,可以安裝 Spring Assistant 這個(gè)插件可以實(shí)現(xiàn)同樣的功能。它們的原理是幫你把連接 Spring Initializr 并下載解壓這個(gè)過程自動(dòng)化了,所以只需要保持網(wǎng)絡(luò)暢通就行了。

圖片

img

那如果要用原生的springMVC來實(shí)現(xiàn)這個(gè)事情就復(fù)雜了,可以看看右邊我大概羅列的這些步驟,當(dāng)時(shí)學(xué)的時(shí)候讓我我非常頭疼。要單獨(dú)安裝Tomcat,安裝的過程中要注意版本和當(dāng)前的spring版本是否兼容,手動(dòng)引入spring各個(gè)模塊的依賴。pom.xml就不說了,maven工程都要用到,然后還有web.xml-用來配置servlet、攔截規(guī)則、字符編碼器等等,applicationContext.xml,springmvc.xml 等一大堆xml文件……

這個(gè)過程對(duì)初學(xué)者非常不友好,記憶這些步驟和配置文件能讓人崩潰,xml這種表達(dá)方式又不是很直觀。這些東西稱為腳手架,在小公司里面會(huì)搭建這些東西就可以算半個(gè)師傅了,小弟們就可以在搭好的架子里面寫業(yè)務(wù)代碼了。

再聊回微服務(wù),試想一下,如果我們要跟上時(shí)代的步伐,使用微服務(wù)去開發(fā)軟件,每個(gè)功能模塊都部署成一個(gè)單獨(dú)的服務(wù),這個(gè)時(shí)候我們?cè)偈褂眉兇獾?Spring 去開發(fā),每開發(fā)一個(gè)服務(wù)都需要重復(fù)的搭建項(xiàng)目骨架,然后編寫各種配置文件,幾十幾百個(gè)服務(wù)加起來,這部分工作量是很大的,這還不算業(yè)務(wù)代碼的開發(fā)時(shí)間。這種時(shí)候就是 SpringBoot 發(fā)揮它開箱即用的特質(zhì)的時(shí)候了。然后多個(gè)微服務(wù)之間再通過 Spring 全家桶里面的 SpringCloud 進(jìn)行管理,比如服務(wù)注冊(cè)、服務(wù)發(fā)現(xiàn)等等。所以我們現(xiàn)在說 SpringBoot 是 Java 企業(yè)級(jí)開發(fā)的一站式解決方案。

六:總結(jié)

Spring Boot 的設(shè)計(jì)初衷是解決 Spring 各版本配置工作過于繁重的問題 ,簡(jiǎn)化初始搭建流程、降低開發(fā)難度,使開發(fā)人員只需要專注應(yīng)用程序的功能和業(yè)務(wù)邏輯實(shí)現(xiàn),而不用在配置上花費(fèi)太多時(shí)間。

Spring Boot 使用“默認(rèn)大于配置”的理念,提供了很多已經(jīng)集成好的方案 ,以便程序員在開發(fā)應(yīng)用程序時(shí)能做到零配置或極簡(jiǎn)配置。同時(shí),為了不失靈活性,它也支持自定義操作。

Spring Boot 內(nèi)置了50多種 starter,以便快速配置和使用 。比如,要使用 Email 服務(wù),只需要添加"spring-boot-starter-mail"依賴,然后直接調(diào)用 JavaMailSender 接口發(fā)送郵件。

Spring Boot 可以看作是 Spring 框架的擴(kuò)展和自動(dòng)化, 它消除了在 Spring 中需要進(jìn)行的 XML(Extensible Markup Language) 文件配置,使得開發(fā)變得更快、更高效、更自動(dòng)化 。

Spring Boot 幫我們省去了煩瑣的配置工作,開發(fā)人員只需要專注業(yè)務(wù)邏輯開發(fā)即可 。

用一句話來說明:Spring Boot 是 Spring 框架的擴(kuò)展和自動(dòng)化。

七:Spring Boot和Spring的關(guān)系

不是 :從馬車到汽車那種交通出行的顛覆,從燃油車到純電動(dòng)車那種能源利用的變革,從人工駕駛到AI智能那種駕駛方式的升級(jí)??傊皇钱a(chǎn)品的升級(jí)換代,不是誰要替換誰。

而是 :汽車從手動(dòng)擋變成自動(dòng)擋,然后增加無鑰匙進(jìn)入、一鍵啟動(dòng)、發(fā)動(dòng)機(jī)自動(dòng)起停、自動(dòng)泊車、定速巡航...等功能。越來越多新上市的車型開始標(biāo)配上面這些新技術(shù),讓你開車更省心更輕松,把更多的注意力放在駕駛上。

八:Spring和Spring Boot區(qū)別

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2973

    瀏覽量

    104907
  • 開發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    370

    瀏覽量

    40878
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14362
  • SpringBoot
    +關(guān)注

    關(guān)注

    0

    文章

    174

    瀏覽量

    187
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SpringBoot配置Mybatis的2個(gè)錯(cuò)誤和修正

    SpringBoot】配置Mybatis錯(cuò)誤
    發(fā)表于 04-19 10:31

    SpringBoot中的Druid介紹

    SpringBoot中Druid數(shù)據(jù)源配置
    發(fā)表于 05-07 09:21

    基于SpringBoot mybatis方式的增刪改查實(shí)現(xiàn)

    SpringBoot mybatis方式實(shí)現(xiàn)增刪改查
    發(fā)表于 06-18 16:56

    SpringBoot知識(shí)總結(jié)

    SpringBoot干貨學(xué)習(xí)總結(jié)
    發(fā)表于 08-01 10:40

    springboot spring data jpa使用總結(jié)

    【本人禿頂程序員】springboot專輯:spring data jpa的使用
    發(fā)表于 04-15 11:38

    怎么學(xué)習(xí)SpringBoot

    SpringBoot學(xué)習(xí)之路(X5)- 整合JPA
    發(fā)表于 06-10 14:52

    SpringBoot 學(xué)習(xí)筆記

    SpringBoot 學(xué)習(xí)筆記 【整合JWT】添加依賴創(chuàng)建工具類登錄獲取jwt使用jwtDemo源碼參考資料添加依賴pom.xml...com.auth0java-jwt3.12.0
    發(fā)表于 07-01 07:27

    springboot集成mqtt

    springboot集成mqtt,大綱一.數(shù)據(jù)入庫(kù)1.數(shù)據(jù)入庫(kù)解決方案二.開發(fā)實(shí)時(shí)訂閱發(fā)布展示頁面1.及時(shí)通訊技術(shù)2.技術(shù)整合
    發(fā)表于 07-16 07:53

    怎樣去使用springboot

    怎樣去使用springboot呢?學(xué)習(xí)springboot需要懂得哪些?
    發(fā)表于 10-25 07:13

    SpringBoot應(yīng)用啟動(dòng)運(yùn)行run方法

    什么時(shí)候創(chuàng)建嵌入式的Servlet容器工廠?什么時(shí)候獲取嵌入式的Servlet容器并啟動(dòng)Tomcat;獲取嵌入式的Servlet容器工廠:1)、SpringBoot應(yīng)用啟動(dòng)運(yùn)行run方法2
    發(fā)表于 12-20 06:16

    SpringBoot配置嵌入式Servlet

    SpringBoot配置嵌入式Servlet容器定制和修改Servlet容器相關(guān)配置全局配置文件編寫WebServerFactoryCustomizer注冊(cè)Servlet三大組件注冊(cè)Servlet
    發(fā)表于 12-20 06:19

    SpringBoot實(shí)現(xiàn)多線程

    SpringBoot實(shí)現(xiàn)多線程
    的頭像 發(fā)表于 01-12 16:59 ?1852次閱讀
    <b class='flag-5'>SpringBoot</b>實(shí)現(xiàn)多線程

    什么是 SpringBoot?

    本文從為什么要有 `SpringBoot`,以及 `SpringBoot` 到底方便在哪里開始入手,逐步分析了 `SpringBoot` 自動(dòng)裝配的原理,最后手寫了一個(gè)簡(jiǎn)單的 `start` 組件,通過實(shí)戰(zhàn)來體會(huì)了 `
    的頭像 發(fā)表于 04-07 11:28 ?1338次閱讀
    什么是 <b class='flag-5'>SpringBoot</b>?

    SpringBoot的核心注解1

    今天跟大家來探討下SpringBoot的核心注解@SpringBootApplication以及run方法,理解下springBoot為什么不需要XML,達(dá)到零配置
    的頭像 發(fā)表于 04-07 14:34 ?716次閱讀
    <b class='flag-5'>SpringBoot</b>的核心注解1

    SpringBoot的核心注解2

    今天跟大家來探討下SpringBoot的核心注解@SpringBootApplication以及run方法,理解下springBoot為什么不需要XML,達(dá)到零配置
    的頭像 發(fā)表于 04-07 14:34 ?1974次閱讀
    <b class='flag-5'>SpringBoot</b>的核心注解2