springjava
結構圖web
spring是一個生態體系(也能夠說是技術體系),是集大成者,它包含了Spring Framework ,Spring Boot, Spring Cloud等(還包括Spring Cloud data flow,Spring data, Spring Batch, Spring security 等等).spring
Spring是一個分層的JavaSE/EE full-stack(一站式)輕量級開源框架。編程
Spring爲不一樣的層都提供的企業級解決方案:服務器
web層:spring mvc架構
service層:spring併發
dao層:JDBCTemplate、Spring data jpa (Java Persistence API)mvc
Spring的核心思想是IoC(控制反轉)和AOP(面向切面編程)app
Spring Framework負載均衡
Spring Framework是整個spring生態的基石,它但是硬生生的消滅了Java官方主推的企業級開發標準EJB,從而實現一統天下。Spring官方對Spring Framework簡短描述:爲依賴注入、事務管理、WEB應用、數據訪問等提供了核心的支持。Spring Framework專一於企業級應用程序的「管道」,以便開發團隊能夠專一於應用程序的業務邏輯。
筆者要提醒的是,千萬不要把Spring和Spring Framework搞混淆了,不少文章都錯誤的定義了spring:spring是一個一站式的輕量級的java開發框架,核心是控制反轉(IoC)和麪向切面(AOP),針對於開發的WEB層(springMVC)、業務層(IoC)、持久層(jdbcTemplate)等都提供了多種配置解決方案。這是Spring Framework的定義,至於Spring,是整個生態。
可是,不管Spring Framework接口如何簡化,設計如何優美,始終沒法擺脫被動的境況:因爲它自身並不是容器,因此基本上不得不隨JavaEE容器啓動而裝載,例如Tomcat、Jetty、JBoss等。然而Spring Boot的出現,改變了Spring Framework甚至整個Spring技術體系的現
Spring Boot
SpringBoot是一個快速整合的第三方框架,簡化了XML配置徹底採用註解化、內置http服務器(Tomcat),最終以java應用程序進行執行
Spring Boot這傢伙簡直就是對Java企業級應用開發進行了一場浩浩蕩蕩的革命。若是稍微有幾年工做經驗的老油條,應該都記得之前的Java Web開發模式:Tomcat + WAR包。WEB項目基於spring framework,項目目錄必定要是標準的WEB-INF + classes + lib,並且大量的xml配置。若是說,之前搭建一個SSH架構的Web項目須要1個小時,那麼如今應該10分鐘就能夠了。
Spring Boot可以讓你很是容易的建立一個單機版本、生產級別的基於spring framework的應用。而後,"just run"便可。Spring Boot默認集成了不少第三方包,以便你能以最小的代價開始一個項目。
咱們看看官方對Spring Boot的定義:
Spring Boot is designed to get you up and running as quickly as possible, with minimal upfront configuration of Spring. Spring Boot takes an opinionated view of building production-ready applications.
即Spring Boot爲快速啓動且最小化配置的spring應用而設計,而且它具備用於構建生產級別應用的一套固化的視圖。這裏的固化的視圖,筆者認爲能夠理解成Spring Boot的約定,由於Spring Boot的設計是約定大於實現的。
Spring Cloud
springnCloud;
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、負載均衡、斷路器、數據監控等,均可以用Spring Boot的開發風格作到一鍵啓動和部署。
最後就是大名鼎鼎的Spring Cloud了,Spring Cloud事實上是一整套基於Spring Boot的微服務解決方案。它爲開發者提供了不少工具,用於快速構建分佈式系統的一些通用模式,例如:配置管理、註冊中心、服務發現、限流、網關、鏈路追蹤等。
最後就是Spring Cloud生態組件的穩定性和性能。用Spring Cloud微服務生態組件或多或少會碰到這樣那樣的問題。你甚至會懷疑,這個東西竟然是和Spring Framework以及Spring Boot一塊兒屬於spring生態的。畢竟,後二者使用過程當中你是幾乎碰不到問題的。Spring Cloud的一些方案給個人感受更像一個半成品,若是你的公司使用Spring Cloud來搭建微服務,那麼確定須要一個團隊來維護用到的Spring Cloud組件。至於性能嘛,各服務之間默認經過HTTP調用,因此性能你懂的。另外,Spring Cloud netflix這一套組件雖然由netflix貢獻,可是我敢確定絕對是閹割版,以它的hystrix來講,至關多的缺陷,我可不認爲hystrix在高併發下能工做的很好。
Spring Cloud還有一個尷尬的處境就是,大公司基本上不會引入這一套架構,好比阿里,有本身一套完整的微服務解決方案,美團也所有都是自研,還有不少公司的網關也是自研。綜上,筆者得出的結論是:Spring Boot是大勢所趨,並且它就像當年Spring Framework幹掉EJB同樣,幹掉WEB容器+WAR的開發模式,統一如今的Java企業級應用開發標準。至於Spring Cloud?請謹慎選擇每個引入項目的組件,畢竟它的每個微服務組件都面對不少優秀的開源可替代方案。