在JAVA項目開發過程中,我們常常會使用開源的基礎框架再引入一些中間件來快速的搭建一個項目,然后進行二次開發。先說中間件,有我們比較常用的RabbitMQ/RocketMQ/Kafka、redis、Dubbo、Zookeeper等等。再說核心基礎框架,現在比較通用的是Spring、SpringBoot和SpringCloud。那么今天我們按照Spring、SpringBoot、SpringCloud這個順序來認識一下Spring家族以及他們各自扮演的角色。
一、Spring框架(Spring Framework)
Spring是一個輕量級的容器框架。這個框架最初是為了解決EJB開發笨重臃腫的問題,Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情,為J2EE提供了另一種簡單又實用的解決方案,Spring被認為是一個低成本、安全、靈活的框架。Spring提高了編碼效率并減少了整體開發時間,因為它是輕量級的,有效地使用系統資源并提供了出色的開發體驗。Spring消除了繁瑣的配置工作,讓開發人員可以專注于創建有效的業務邏輯。Spring負責基礎設施,以便開發人員可以專注于應用程序。它的主要特點就是面向切面(AOP)和控制反轉(IOC)。
補充說明:EJB屬于分布式開發,但是目前市場中小型企業都是非分布式項目,所以為了應市場要求,springBoot橫空出世,恰恰解決了中小企業的問題,springBoot誕生就是市場的應召的微服務。舉個例子,EJB就是導彈,專門設計為打高空飛機。但是現在發現飛機不多。于是將它用來對付步兵,這個實在太糟糕了。這個時候有人發明了狙擊步槍(Spring),發現對付步兵使用阻擊步槍太好用了。這里面導彈和阻擊步槍都可以實現打步兵的目的,但使用導彈代價太高。狙擊槍才是最好的選擇。
搭建純Spring項目Demo步驟。
1.使用idea構造一個Spring項目,命名為SpringDemo,會自動加載jar包,在SpringDemo項目的lib目錄下
2.在src目錄下建立兩級目錄com.cn,并在此目錄下編寫一個接口Api,和兩個接口實現類ApiImplOne,ApiImplTwo。
3.在src目錄下編寫Spring的配置文件ApplicationContext.xml(這里不考慮數據庫的配置等)
4.編寫測試類TestDemo,運行,查看控制臺打印結果
二、SpringBoot框架
SpringBoot是Spring的升級版,Spring Boot 基本上是 Spring 框架的擴展,它消除了設置 Spring 應用程序所需的 XML配置,為更快,更高效的開發生態系統鋪平了道路。可以理解為Spring Boot就是一個基于Spring的套件,它幫我們預組裝了Spring的一系列組件,以便以盡可能少的代碼和配置來開發基于Spring的Java應用程序。
舉個例子說明:
如果我們想組裝一輛汽車,我們需要發動機、輪胎、底盤、外殼、座椅、內飾等各種部件,然后把它們裝配起來。Spring就相當于提供了一系列這樣的部件,但是要裝好汽車上路,還需要我們自己動手。而Spring Boot則相當于已經幫我們預裝好了一輛可以上路的汽車,如果有特殊的要求,例如把發動機從普通款換成渦輪增壓款,可以通過修改配置或編寫少量代碼完成。
基于SpringBoot框架,我們可以集成其他的技術,比如Redis、RabbitMqRockerMQKafka、Zookeeper、Dubbo、quartz、logback、OSSOBS、jenkins、ELK 等,這些是需要額外的編寫代碼或者配置集成的。
三、SpringCloud框架
SpringCloud是基于SpringBoot來實現的微服務架構開發組件,Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。Spring Cloud并沒有重復制造輪子,它只是將各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝屏蔽掉了復雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分布式系統開發工具包。
springCloud關注于全局的微服務整合和管理,將多個springBoot單體微服務進行整合以及管理。
四、SpringBoot框架和SpringCloud框架比較
市場上使用Spring底層的基本是使用SpringBoot或者SpringCloud,它們均集成了spring,那么接下來我們就重點說明一下SpringBoot和SpringCloud的區別。
1、SpringBoot和SpringCloud的區別
SpringBoot只是一個快速開發框架,使用注解簡化了xml配置,內置了Servlet容器,以Java應用程序進行執行。它提供了一個默認配置,從而簡化配置過程;
SpringCloud是基于spring boot的一系列框架的集合,包括 eureka、ribbon、 feign、 zuul 、hystrix等。它為了給微服務提供一個綜合管理框架。
2、既然SpringCloud那么強大,為什么還繼續使用SpringBoot
使用場景不同。SpringBoot 用于關聯性不強的單個微服務。當服務拆分多個微服務協作時為提高服務間的相互協作的可靠性高性能就要上SpringCloud。
項目規模會決定你使用什么樣的框架,比如一個小型的后臺管理系統,就比較適合使用SpringBoot,部署起來也比較簡單,在不考慮高并發的情形下使用Springboot可以快速進行開發,后續也可以通過Nginx/haproxy負載等來提高性能,對硬件的需求也相對較小。如果使用SpringCloud,相對比較復雜,并且投入的硬件成本較高。
額外備注:微服務領域已經出了SpringCloud,為何還要學習SpringCloud Alibaba?
一個很重要的原因就是SpringCloud中一些組件閉源了,不再維護,如果在生產環境出現了問題,官方不再免費維護了。比如:注冊中心Eureka在2.0版本之后宣布閉源了,容錯組件Hystrix、網關組件Zuul也已經宣布停止維護了。SpringCloud Alibaba技術棧中的各個組件對比SpringCloud來講,在性能上要更好一些。很多技術是阿里巴巴內部經過多年雙11、雙12大促的考驗,經過不斷總結和優化開源出來的產品。