亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

五分鐘學Java:一篇文章帶你搞懂spring全家桶套餐

發布時間:2020-08-07 09:43:22 來源:ITPUB博客 閱讀:652 作者:a724888 欄目:編程語言

五分鐘學Java:一篇文章帶你搞懂spring全家桶套餐

原創聲明

本文首發于微信公眾號【程序員黃小斜】

本文作者:黃小斜

轉載請務必在文章開頭注明出處和作者。

本文思維導圖

spring全家桶里都有哪些食物

上期我們講了spring和springmvc兩個框架的基礎知識和學習路線,而這期內容,我們將圍繞著spring全家桶展開來討論。

大家應該都知道,按照出現的順序,spring全家桶大概包含了spring、springmvc、springboot以及springcloud,從開胃小菜spring到滿漢全席springcloud,spring全家桶可謂Java工程師的必備大餐,那么,我們不妨先來看看,spring全家桶是如何從光桿司令spring發展到如今的龐大家族的。

目前,Spring生態中包含22個主要活躍的項目。

五分鐘學Java:一篇文章帶你搞懂spring全家桶套餐

你會發現,這些項目幾乎涵蓋了日常開發所有的場景,只不過你不一定會用到而已,除了spring和springmvc,springcloud和springboot之外,還有很多開源的spring生態項目持續在spring社區維護,比如springdata,用于解決spring中的統一數據方案,spring integration,顧名思義,適用于集成外部服務。

還有我們在一些項目中可能用到的spring security,通常用來解決一些安全問題,這個框架在業界用的也比較多。

除此之外,spring AMQP以及spring Kafka則是在spring框架中集成了對應的消息中間件,讓消息收發在框架中更容易地被使用。

在整個Spring生態中包含了許多應用在特定場景的具體框架,如:“Spring Framework”,“Spring Security”,“Spring Boot”,“Spring Cloud”等等,其中“Spring Framework”框架是整個生態的核心基礎,其他框架都需要依賴“Spring Framework”提供的基礎功能,而且每個框架都有自己獨立的代碼倉庫。

面向spring編程的Java工程師

想起我第一次上手做Java項目的時候,就是在網上尋找教程,那個時候就已經看到了很多spring框架應用的項目,基本上網上入門的項目都是基于的SpringMVC,可能是ssm或者ssh。

總之,教程里會叫你寫一個controller,返回簡單的“hello world”,復雜點的,可能要接入數據庫,使用一下mybatis,當然了,很多時候網上都能找到源碼,你只要下載下來run一遍就好了,當然,前提是你已經安裝好了JDK,并你會使用maven和ide,否則下載下來了你可能run不起來,各種報錯。雖然這些問題對于老司機來說是不存在的,但是相信我,這對于小白來說是經常遇到的問題。

我最早寫博客的時候,就是在上手做一個簡單的ssm項目,當時笨手笨腳地配置好了各種東西,好不容易把整個工程跑了起來,于是高興地記錄起了實戰過程,后來時間一久,再回去看當初的那幾篇博客,覺得自己真是菜的摳腳。

但是這都是新手程序員需要經歷的,你需要想搞懂Java基礎,再去搞懂Java Web,要完全了解了Java Web,你就必須要會spring,會了spring之后,請把它相關的組件也都搞懂,特別是那些你在工作中可能要用到的。

五分鐘學Java:一篇文章帶你搞懂spring全家桶套餐

如今我在阿里做Java,每天用的技術都是自研的中間件,這些中間件技術其實很多也是吸取了開源技術的精髓,你可以經常在它們的源代碼中看到spring的影子,這就是spring生態系統強大的影響力,即使是國內一流的Java技術團隊,都會花大量時間去研究和學習spring框架源碼。

做Java開發的人一提起Spring,首先在腦海中浮現出的就是“IoC”,“AOP”,“Spring MVC”,“Spring Security”等等這些名詞,甚至大有“無Spring不Java”的感慨。
實際上,時至今日Spring已不再是一個簡單的編程框架了,從最初的“SSH框架”發展到今天,Struts和Hibernate都幾乎快要從程序員視野中消失了,而Spring卻發展成了一個非常龐大且完整的生態。

所以說,除非特別指明是Spring生態中的某個具體框架,否則提起“Spring”應該指的是整個Spring生態。

說句不夸張的話,Java程序員只要精通了Spring,也就掌握了Java開發的精髓。

Spring Framework

上一期內容中我們已經介紹了spring和springmvc,這里為了內容的完整性,請允許我再贅述一遍。

Spring Framework項目是整個Spring生態的基礎,包含了Spring最核心的功能,如:IoC,AOP,Spring MVC等,其他項目都需要依賴Spring Framework。
另外,還需要注意的是Spring Framework項目又包含多個子模塊,如:spring-core,spring-beans,spring-context,spring-aop,spring-web,spring-webmvc等等。

實際上,Spring Framework項目是一個模塊化的架構,各模塊之間又存在依賴關系。我們在Java Web后臺項目中使用得最多的Spring MVC實際上就是模塊spring-webmvc,它與其他模塊的依賴關系如下所示:

五分鐘學Java:一篇文章帶你搞懂spring全家桶套餐

顯然,spring-webmvc模塊依賴spring-context,spring-aop和spring-web。
spring-webmvc模塊的依賴關系

五分鐘學Java:一篇文章帶你搞懂spring全家桶套餐

springboot

我第一次是接觸springboot的時候,還是在某度實習的時候,當時我們做的是私有云,使用的正是開源項目OpenStack,OpenStack本身包含很多組件,有的負責網絡,有的負責存儲,有的負責調度等等,所有它的整體部署方式就是分布式的,因此做微服務拆分也是很正常的。

當然,那個時候我對微服務還沒有什么概念,對springboot也只有一面之緣,只知道當時我師傅告訴我說,springboot是用來作微服務的,讓我看看某個springboot項目的代碼,于是我一愣一愣地就去看了,結果發現,這個東西和spring好像長得也沒啥區別啊,除了啟動方式奇怪了點,xml配置文件少了點,好像也沒啥太大的不同。

實際上,也確實如此,Spring Boot是一個開發基于Spring的腳手架項目,它簡化了很多spring的和springmvc的特性,讓新手更加容易地上手spring開發。

比如,它默認集成了嵌入式Tomcat,配置注解化,支持快速集成第三方開發組件(如MyBatis),大大降低了使用Spring的門檻,而且內置了許多可以直接用于生產環境的功能。

簡單來看,springboot就是在springmvc外又包了一層,屏蔽了springmvc一些復雜的實現細節,以及繁瑣的配置及開發流程,轉而把一些約定俗成的東西做成規范,形成了所謂的springboot starter。

五分鐘學Java:一篇文章帶你搞懂spring全家桶套餐

這種支持快速開發、快速繼承的框架,顯然是非常提升開發效率的,所以,它是目前用于開發微服務架構項目的不二選擇。

不過這里要強調一點,springboot并不等同于微服務,它充其量只是一個應用容器而已,如果把微服務比作一張大網,那么springboot應用只是這張網中的一個個小點,而微服務還需要通過服務網關、負載均衡、注冊中心等手段把這些點連接起來,并且在這張網的運行中支持服務的降級和熔斷(切斷到某個點的連接

值得注意的是: 許多人剛接觸Spring Boot的人把它神話了,固然使用Spring Boot能快速開發一個健壯的、可直接運行的項目,但是它的核心和基礎來源于Spring Framework。

對于重度依賴Spring的開發人員,應該先去吃透Spring Framework,只要真正掌握了Spring Framework中各個模塊的實現原理,對于在實際開發中使用Spring Boot遇到的問題也就迎刃而解了。

先來說說,什么是微服務?

不瞞您說,我到現在都沒有真正意義上地接觸過springcloud,原因很簡單,我開發工作用的技術棧已經被阿里內部的中間件承包了,所有你在springcloud里用到的技術,在阿里內部都有對應的一套甚至是幾套實現,它們有的已經開源了,有的只在內部使用,反正,在阿里你是用不到開源的技術的,即使強如springcloud的也是一樣。

其實除了阿里,類似美團、京東等Java大廠,一樣也會維護自己的一套自研技術棧,畢竟自己的東西自己說了算,出現問題也能第一時間修復,如果用的是開源技術,萬一哪天出了bug,還得到開源社區求爺爺告奶奶,豈不是很尷尬。

雖然沒有嚴格意義上地接觸過springcloud,但是微服務這一套東西其實是換湯不換藥的。

讓我們來看看百度百科對于微服務和springcloud的介紹吧。

所謂的微服務是SOA架構下的最終產物,該架構的設計目標是為了肢解業務,使得服務能夠獨立運行。微服務設計原則:1、各司其職 2、服務高可用和可擴展性。
微服務是一個新興的軟件架構,就是把一個大型的單個應用程序和服務拆分為數十個的支持微服務。一個微服務的策略可以讓工作變得更為簡便,它可擴展單個組件而不是整個的應用程序堆棧,從而滿足服務等級協議。

其實這里已經說得比較明白了,微服務的作用是把以往龐大的單個應用拆分成多個組件,每個組件各司其職,比起單個大型服務,微服務的好處實在太多了,比如它們可以單獨部署,單獨測試,更好地支持DevOps,更有效利用機器資源,同時更容易保證擴展性和可用性。下圖就是微服務架構的變遷過程。

五分鐘學Java:一篇文章帶你搞懂spring全家桶套餐

如果還是沒理解,那我就一點一點地給你解釋。

1、在部署和研發效率方面,一個大型應用,部署本身就很慢,改動一點代碼就要部署半天,研發迭代效率可想而知,而微服務應用本身體量就小,部署快,每個微服務可以獨立開發迭代,效率自然高。

2、在使用資源和測試效率方面,一個大型應用,往往占用的資源上下限差距很大,很多時候我們不得不給他分配大量的資源,而微服務應用如今都支持容器化部署,容器化部署的最大好處就是支持資源的彈性伸縮,提高資源利用效率。而對于測試來說,一個大型應用,往往一點點改動就需要回歸這個應用的代碼,代價可想而知,而微服務拆分后,測試的量將大大降低。

除此之外,微服務的優點還很多,比如更容易排查問題,更容易進行擴容和伸縮,更能夠避免單點的問題。

下面這張圖,把我們日常的生活比作微服務,其實,我們的生活不就是由這么一個個齒輪組成的么。

五分鐘學Java:一篇文章帶你搞懂spring全家桶套餐

當然,微服務也不全都是優點,缺點自然也是有的。
比如,微服務的拆分需要花很大代價,首先應用要拆分,原來的本地服務要變成分布式服務,而分布式服務要面臨的問題比本地服務的多得多,不過幸好微服務框架已經解決了其中一些問題。

另外,微服務的拆分不僅是應用的拆分,相應的數據源也要進行拆分,這就涉及到了分布式數據庫的一些解決方案,比如分庫分表,比如分布式事務等等,也就是說,微服務的拆分必然引入很多分布式環境下才有的問題,包括數據一致性、網絡分區等等。

五分鐘學Java:一篇文章帶你搞懂spring全家桶套餐

springcloud:最佳的微服務開源方案

那么,既然微服務拆分會帶來這么多問題,那么微服務框架的研發者自然也想到了,于是它們會用各種辦法來幫助開發者解決這些問題,下面就讓我們來看看springcloud是怎么做的吧。

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用Spring
Boot的開發風格做到一鍵啟動和部署。
Spring Cloud并沒有重復制造輪子,它只是將各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝屏蔽掉了復雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分布式系統開發工具包。

五分鐘學Java:一篇文章帶你搞懂spring全家桶套餐

顯然,springcloud是有備而來的,微服務拆分引起的問題,它都可以一一化解。

比如,把本地服務拆分成分布式服務,springcloud提供了服務注冊中心和配置中心,以及統一的服務網關,讓分布式服務像本地服務一樣簡單易用

與此同時,消息總線、負載均衡等技術解決了分布式環境中的一些高并發問題。

除此之外,像是數據監控、熔斷和限流、分布式鏈路追蹤、集群容錯等功能,都在springcloud中有對應的解決方案。

再次強調一下,springcloud才是微服務框架,而springboot只是一個快速開發web應用的腳手架,Spring Cloud的基礎是Spring Boot,基于Spring Boot可以大大簡化開發各微服務組件的流程。

至此,我們已經介紹完了spring全家桶的大部分內容,希望這些內容對于你日后學習spring生態技術有所幫助。

推薦資源

其實,spring最好的技術資源就在官方: https://spring.io/

英文好的同學不妨直接去看官方文檔。

書籍

Spring Boot實戰 ,丁雪豐 (譯者)

Spring源碼深度解析

視頻

這里我整理了一些還算不錯的視頻資源分享給大家,具體請在公眾號【程序員黃小斜】內回復“spring”即可查看

博客

Java技術倉庫《Java程序員復習指南》

https://github.com/h3pl/Java-Tutorial

整合全網優質Java學習內容,幫助你從基礎到進階系統化復習Java

面試指南

全網最熱的Java面試指南,共200多頁,非常實用,不管是用于復習還是準備面試都是不錯的。
在公眾號【Java技術江湖】回復“PDF”即可免費領取。

寫在最后

如果覺得本文對你有幫助的話,請你也不要吝嗇你的“好看”哈,轉發朋友圈就是對我最大的支持啦,你們的支持是對我最大的鼓勵。

對本系列文章有什么建議和意見,也歡迎留言告訴我,期待你的回饋。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿合奇县| 崇阳县| 镇雄县| 孟津县| 黑山县| 高阳县| 鱼台县| 武义县| 江达县| 山阴县| 柳州市| 比如县| 元阳县| 密云县| 长治县| 阿巴嘎旗| 虞城县| 阳信县| 南川市| 夹江县| 商南县| 松潘县| 衡阳县| 郓城县| 岱山县| 台南市| 宁南县| 阜阳市| 和政县| 全南县| 金秀| 徐闻县| 和林格尔县| 大悟县| 昔阳县| 夏津县| 海晏县| 建昌县| 吴旗县| 和平区| 尚义县|