Spring Boot從零入門1_詳述

本文屬於原創,轉載註明出處,歡迎關注微信小程序小白AI博客 微信公衆號小白AI或者網站 xiaobaiai.nethtml

[TOC]java

1 開始以前

在開始學習Spring Boot以前,我以前從未接觸過Spring相關的項目,Java基礎仍是幾年前自學的,如今估計也忘得差很少了吧,寫Spring Boot本身的學習過程前,同時給一塊兒學習的同窗們作個鼓勵,相信本身可以學好,大概瞭解了下Spring的整個發展,仍是有不少鋪墊知識是要知道的,並且就算知道,沒有實踐經驗可能仍是不可以很深刻的體會實際項目中有什麼不同。總之,幹就是了,而後就是堅持走下來,至於爲何要學習Spring Boot,這也是我本身的一個選擇,架構之路中一環,武功中的一個大招,期待學會這個大招。Spring Boot已是Spring的最上層了,從上而下,重新到舊,打通整個Spring脈絡。react

2 名詞術語

固然學習以前,確定要去調研一番,瞭解各類跟Spring相關的名詞術語,由於實在太多了,若是不去了解,對後面的學習也會形成困惑,難以理解,尤爲是從未接觸過Java Web,咱們所學習跟Spring相關的知識最終都是如何更好更快的構建企業級Web應用。下面是我學習前所瞭解的一些名詞術語和該術語所扮演的功能角色解釋。nginx

名詞術語 釋義
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 框架是由 struts二、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 更好的結合

概念仍是有點多的,而是基本指的大的軟件框架的概念,具體到其中每個均可以延伸出不少知識,更多能夠參見參考連接詳細瞭解。不過這只是開始,之後能夠慢慢了解,並在實戰中瞭解每個術語自己所具備的特性。web

3 Spring Boot特性與優缺點

既然我選擇了從上而下,重新而舊的方式去入手,那麼咱們對Spring Boot須要更多的瞭解,以及Spring Boot在整個技術棧中扮演了什麼角色?spring

Spring Boot的口號是BUILD ANYTHING WITH SPRING BOOT,用Spring Boot構建一切!sql

從官方網站上的構件圖能夠看出,Spring Boot是一個大容器,是構建全部基於Spring的應用程序的入口,Spring Boot旨在經過最少的Spring前期配置使得咱們儘快啓動並運行項目,例如Spring Boot對比Spring MVC 最大的優勢就是使用簡單,約定大於配置,不會像以前用Spring MVC的時候,時不時被xml 配置文件搞的暈頭轉向。從這裏看其實Spring Boot並非咱們構建Web應用的核心,也能夠知道咱們能夠快速上手Spring Boot,可是咱們卻能夠經過這個入口抽絲剝繭去了解它所包含的全部。咱們能夠列一下Spring Boot的特性:數據庫

  • 可使用Spring Initializr在幾秒鐘內快速入門
    • 經過Spring Initializr(https://start.spring.io/),咱們能夠基於Web UI快速構建一個Spring Boot項目
  • 構建輸出任何內容:REST API,WebSocket,Web,流,任務等
    • 總之就是Web相關都行!
  • 簡化安全策略集成
  • 對SQL和NoSQL的很是友好的支持
  • 支持運行期內嵌容器:Tomcat,Jetty和Undertow
    • 很是輕鬆地開發和測試咱們的Web應用程序
  • 開發者生產工具,如LiveReload 和 Auto Restart
  • 自動版本依賴管理
    • 避免編寫大量樣板代碼,註釋和XML配置。
  • 可用於生產的功能,例如跟蹤,指標和運行情況
  • 能夠用你喜歡的開發IDE,如Spring Tool Suite(STS)、IntelliJ IDEA(IDEA)或NetBeans等
  • 它提供了CLI(命令行界面)工具,能夠很是輕鬆快捷地從命令提示符處開發和測試Spring Boot(Java或Groovy)應用程序
  • 提供了許多插件
    • 可以使用Maven和Gradle等構建工具很是輕鬆地開發和測試Spring Boot應用程序
    • 能夠很是輕鬆地與嵌入式數據庫和內存數據庫一塊兒使用

有了上面的這些特性,Spring Boot能給我帶來什麼好處或者限制呢:apache

  • 對Spring進行了包裝,使得易於理解和開發Spring應用,簡化配置、測試、打包和集成第三方工具
  • 快速配置項目,管理依賴版本,快速配置單元測試,集成測試等,提升開發效率和生產率
  • 只能解決相似Spring Framework的問題,而不能解決新的問題,即Spring FrameWork能作的就能作
  • 將現有或舊版Spring Framework項目轉換爲Spring Boot應用程序會很費勁

4 總結

本篇從零開始詳述了Spring Boot相關的名詞術語,從零開始瞭解Spring Boot,並講述了Spring Boot的特性與優缺點。經過對Spring Boot的詳述,讓咱們對它有了一個基本的瞭解,接下來,咱們開始進入Spring Boot的內部和實戰。編程

5 更多

更多關於Spring Boot相關的學習,能夠持續關注個人公衆號小白AI或者微信小程序小白AI博客或PC端網站xiaobaiai.net

6 參考資料

  • https://nginx.org/en/
  • https://www.jianshu.com/p/296bacba3510
  • https://www.ibm.com/developerworks/cn/java/j-lo-jetty/index.html
  • https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/index.html
  • https://netty.io/
  • https://stackoverflow.com/questions/6719004/understanding-servlet-container
  • https://mybatis.org/mybatis-3/
  • https://hibernate.org/orm/what-is-an-orm/
  • https://struts.apache.org/
  • https://spring.io/
  • https://docs.spring.io/spring-boot/docs/current/reference/html/
  • https://start.spring.io/
  • https://spring.io/projects/spring-framework
  • https://www.ibm.com/developerworks/cn/java/spring5-webflux-reactive/index.html
  • https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#spring-webflux
  • https://spring.io/projects/spring-cloud
  • https://www.springcloud.cc/
  • https://zhuanlan.zhihu.com/p/36182136
  • https://www.infoq.com/articles/Servlet-and-Reactive-Stacks-Spring-Framework-5/
  • http://www.reactive-streams.org/
  • https://medium.com/clover-platform-blog/building-a-microservice-with-spring-boot-and-spring-cloud-1c8275d7d229
  • https://jimmysong.io/posts/what-is-a-service-mesh/
  • https://istio.io/
    本文屬於原創,轉載註明出處,歡迎關注微信小程序小白AI博客 微信公衆號小白AI或者網站 xiaobaiai.net
相關文章
相關標籤/搜索