Spring Boot從零入門1_詳述
- 2019 年 10 月 29 日
- 筆記
本文屬於原創,轉載註明出處,歡迎關注微信小程式`小白AI部落格` 微信公眾號`小白AI`或者網站 [https://xiaobaiai.net](https://xiaobaiai.net)  [TOC] ## 1 開始之前 在開始學習`Spring Boot`之前,我之前從未接觸過`Spring`相關的項目,`Java`基礎還是幾年前自學的,現在估計也忘得差不多了吧,寫`Spring Boot`自己的學習過程前,同時給一起學習的同學們做個鼓勵,相信自己能夠學好,大概了解了下`Spring`的整個發展,還是有很多鋪墊知識是要知道的,而且就算知道,沒有實踐經驗可能還是不能夠很深入的體會實際項目中有什麼不一樣。總之,干就是了,然後就是堅持走下來,至於為什麼要學習`Spring Boot`,這也是我自己的一個選擇,架構之路中一環,武功中的一個大招,期待學會這個大招。`Spring Boot`已經是`Spring`的最上層了,從上而下,從新到舊,打通整個`Spring`脈絡。 ## 2 名詞術語 當然學習之前,肯定要去調研一番,了解各種跟`Spring`相關的名詞術語,因為實在太多了,如果不去了解,對後面的學習也會造成困惑,難以理解,尤其是從未接觸過`Java Web`,我們所學習跟Spring相關的知識最終都是如何更好更快的構建企業級Web應用。下面是我學習前所了解的一些名詞術語和該術語所扮演的功能角色解釋。
| 名詞術語 | 釋義 |
|---|---|
| SQL & NOSQL | NOSQL,Not Only SQL, 非關係型的資料庫統稱,常見如HBase,BigTable,Redis,Cassandra,LevelDB,MongoDB,CouchDB;SQL這裡泛指RDBMS,即關係型資料庫管理系統,常見如Oracle,DB2,SQL Server,Mysql等 |
| Nginx | Nginx是一款輕量級的Web伺服器、正/反向代理伺服器、負載均衡,郵件代理伺服器和通用的TCP/UDP代理伺服器,最初由俄羅斯人Igor Sysoev編寫,BSD許可 。由於它的記憶體佔用少,啟動極快,高並發能力強,在互聯網項目中廣泛應用。 |
| Jetty | Jetty 作為一個獨立的Servlet 引擎可以獨立提供Web 服務,但是它也可以與其他Web 應用伺服器集成,所以它可以提供基於兩種協議工作,一個是HTTP,一個是AJP 協議。與Tomcat相比各有特點,作為後起之秀,總是帶著新鮮和快速成長的特性 |
| Netty | Netty是非同步事件驅動(NIO,非阻塞IO)的網路應用程式框架,用於快速開發可維護的高性能協議伺服器和客戶端。而提供類似功能的有Tomcat和Jetty,Tomcat是基於Http協議的,而Netty支援各種協議和訂製協議,包括Http、Websocket、SSL&TLS、Protobuf、RTSP、zlib&gzip、LFS等;Netty更是一種網路編程框架,訂製化開發更方便,類似的還有MINA |
| Undertow | Undertow是一種用Java編寫的靈活的高性能Web伺服器,可提供基於NIO的阻塞和非阻塞API。同樣的支援Http、Websocket協議 |
| JDBC | Java DataBase Connectivity,java資料庫連接,是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。 |
| JPA | JPA 伴隨 Java EE 5 發布,Sun 官方提出的一套 Java 持久化規範,它為 Java 開發人員提供了一種對象/關聯映射工具來管理 Java 應用中的關係數據。它的出現主要是為了簡化現有的持久化開發工作和整合 ORM 技術,結束現在 Hibernate,TopLink,JDO 等 ORM 框架各自為營的局面。 |
| Servlet | 在程式碼層面,Servlet其實就是一個介面,定義了一套處理網路請求的規範,所有實現Servlet的類,都需要實現它所定義的五個方法;在定義上,它就是一套Java EE規範,Tomcat & Jetty都是運載Servlet的容器 |
| MyBatis | MyBatis 是一款優秀的持久層框架,MyBatis是iBatis的升級版,它支援訂製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生類型、介面和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對象)為資料庫中的記錄。 目前為止最新版本為3.5.3 |
| Hibernate | Hibernate是一種ORM框架,全稱為 Object Relative DateBase Mapping,在Java對象與關係資料庫之間建立某種映射,以實現直接存取Java對象,目前為止最新版本為 Hibernate ORM 5.4.7 |
| struts2 | Apache Struts是一個免費的開源MVC框架,用於創建優雅的現代Java Web應用程式。它支援約定勝於配置,可以使用插件體系結構進行擴展,並且附帶了支援REST,AJAX和JSON的插件。目前最新版本是2.5.20 |
| Struts Spring Hibernate(SSH) | SSH 框架是由 struts2、spring、hibernate 三大框架組合起來的一套總框架;struts 的核心思想就是實現 MVC;Spring 的核心思想就是解耦,也就是程式碼中不出現 new 實現類的程式碼,我們創建了介面不用關心實現類是誰;hibernate 的核心思想就是(ORM - 對象關係映射) 連接資料庫,我們不用在資料庫寫創建表的語句 |
| Spring | 一個開放源程式碼框架,為JVM上的基於響應和基於servlet的應用程式提供端到端支援,使用基本的JavaBean代替EJB。是一個用於創建Java企業應用程式的流行框架。 它已經超越了最初的產品範圍,涵蓋了使用Spring框架並圍繞Spring框架構建的整個項目系列。Spring的核心技術是依賴項注入(DI),事件,資源,i18n,驗證,數據綁定,類型轉換,SpEL,AOP。現在Spring框架已經發展到了5.0了 |
| Spring MVC | Spring MVC是一個鬆散耦合的MVC框架,是Spring框架眾多組件中的一個,是一個使你能夠根據模型-視圖-控制器設計模式實現Web應用程式的組件。而Struts是緊密耦合的。對於企業級應用程式,你需要構建鬆散耦合的應用程式,因為它會使應用程式更可重用,更健壯以及更分散式。 |
| Spring WebFlux | 是Spring5中的新增模組,開發人員可以使用 WebFlux 創建高性能的 Web 應用和客戶端,名稱中的 Flux 來源於 Reactor 中的類 Flux,該模組中包含了對反應式 HTTP、伺服器推送事件和 WebSocket 的客戶端和伺服器端的支援;在伺服器端開發中,WebFlux 支援兩種不同的編程模型:第一種是 Spring MVC 中使用的基於 Java 註解的方式;第二種是基於 Java 8 的 lambda 表達式的函數式編程模型 |
| Spring Cloud | Spring Cloud為開發人員提供了工具,以快速構建分散式系統中的某些常見模式(例如,配置管理,服務註冊和發現,斷路器,智慧路由,微代理,控制匯流排,一次性令牌,全局鎖,領導選舉,分散式會話,群集狀態,負載均衡)。微服務架構集大成者,雲計算最佳業務實踐。Spring Cloud基於Spring Boot實現,使用HTTP的RESTful風格API作為調用方式。它所包含的多個子項目共同構建了微服務架構體系,總體來說,Spring Cloud相比Dubbo內容更豐富,而且社區和生態相比也較Dubbo好,不過學習成本相對Dubbo要高 |
| Dubbo | 阿里巴巴在2011年開源,2013年停止更新,但在2017年9月又重啟維護並發布了新版本,Dubbo採用Zookeeper作為註冊中心,RPC作為服務調用方式,致力於提供高性能和透明化的RPC遠程服務調用方案。它與Spring無縫集成,基於服務提供方(服務端)與服務調用方(客戶端)角色構建簡單模型,其優點是使用方便、學習成本低 |
| Spring Cloud Data Flow | 將企業連接到物聯網—移動設備,感測器,可穿戴設備,汽車等。Spring Cloud Data Flow提供了用於創建可組合數據微服務的統一服務,這些微服務可解決流和基於ETL的數據處理模式。 |
| Reactive stack & Servlet stack | Spring5 提供了 Servlet 和反應式這兩種 Web 技術棧,在應用層面充分向非同步和非阻塞並發靠攏。 |
| 微服務 | 微服務是一種分散式系統架構,是一種思想,是一種設計原則,Spring Cloud是開發微服務的主流方案,而Spring Boot以Spring Cloud為核心,讓開發微服務更快捷方便;開發微服務框架還有Netflix OSS(微服務實踐鼻祖)、Dubbo、gRPC等 |
| Service Mesh(服務網格) | 服務間通訊的基礎設施層,可以將它比作是應用程式或者說微服務間的 TCP/IP,負責服務之間的網路調用、限流、熔斷和監控,相關Service Mesh開源項目有Linkerd、Envoy、Istio、Conduit、nginMesh、Kong等,與微服務相比,微服務更像是一個服務之間的生態,專註於服務治理等方面,而服務網格更專註於服務之間的通訊,以及和 DevOps 更好的結合 |

