Spring家族主流成員介紹與比較

目錄

1 前言 

2 概念解讀

2.1 什麼是Spring?

2.1.1 簡介

2.1.2 Spring的初衷

2.1.3 Spring的目標

2.1.4 Spring的基本組成

2.1.5 Spring的發展

2.2 什麼是SpringMVC?

2.2.1 簡介

2.2.2 用途介紹

2.2.3 SpringMVC常用註解

2.3 什麼是SpringBoot?

2.3.1 簡介

2.3.2 用途介紹

2.3.3 主要目標

2.4 什麼是SpringCloud?

2.4.1 簡介

2.4.2 Spring Cloud組成

2.4.3  Spring Cloud架構

3 Spring和SpringMVC

4 SpringMVC和SpringBoot

5 Spring,Spring MVC,Spring Boot 三者比較

6 SpringBoot和SpringCloud

7 結論


摘 要:Spring 就像一個大家族,有衆多衍生產品例如 Boot,Security,JPA等等。但他們的基礎都是Spring 的 IOC 和 AOP,IOC提供了依賴注入的容器,而AOP解決了面向切面的編程,然後在此兩者的基礎上實現了其他衍生產品的高級功能;Spring MVC是基於 Servlet 的一個 MVC 框架,主要解決 WEB 開發的問題;而Spring Boot 是基於Spring的一套快速開發整合包,Spring Boot遵循的也是約定優於配置原則,它的目的在於實現自動配置,降低項目搭建的複雜度;Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用Spring Boot的開發風格做到一鍵啓動和部署。

 

 

關鍵詞:Spring;SpringMVC;SpringBoot;SpringCloud;IOC;AOP;

 

 

1 前言 

對於一個Java開發者來說,Spring可謂如雷貫耳,無論是Spring框架,還是Spring引領的IOC,AOP風格,都對後續Java開發產生的深遠的影響,同時,Spring社區總能及時響應開發者的需求,推出適應潮流發展的新功能特定;而對於大部分開發者而言,平時接觸最多的應該就是Spring MVC以及Spring Boot了,本文將分別對Spring,Spring MVC,Spring Boot以及SpringCloud做總體概述,並分析闡述它們各自想要解決的問題,以便初學者能更好的瞭解Spring及相關概念。

 

2 概念解讀

2.1 什麼是Spring?

2.1.1 簡介

 Spring是一個輕量級的控制反轉(IoC)和麪向切面(AOP)的容器框架。

 Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是爲了解決企業應用開發的複雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構允許使用者選擇使用哪一個組件,同時爲 J2EE 應用程序開發提供集成的框架。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於服務器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。Spring的核心是控制反轉(IoC)和麪向切面(AOP)。簡單來說,Spring是一個分層的JavaSE/EE full-stack(一站式) 輕量級開源框架。

2.1.2 Spring的初衷

1、JAVA EE開發應該更加簡單。

2、使用接口而不是使用類,是更好的編程習慣。Spring將使用接口的複雜度幾乎降低到了零。

3、爲JavaBean提供了一個更好的應用配置框架。

4、更多地強調面向對象的設計,而不是現行的技術如JAVA EE。

5、儘量減少不必要的異常捕捉。

6、使應用程序更加容易測試。

2.1.3 Spring的目標

1、可以令人方便愉快的使用Spring。

2、應用程序代碼並不依賴於Spring APIs。

3、Spring不和現有的解決方案競爭,而是致力於將它們融合在一起。

2.1.4 Spring的基本組成

1、最完善的輕量級核心框架。

2、通用的事務管理抽象層。

3、JDBC抽象層。

4、集成了Toplink, Hibernate, JDO, and iBATIS SQL Maps。

5、AOP功能。

6、靈活的MVC Web應用框架。

2.1.5 Spring的發展

Spring框架幾乎涉及到了Java企業級服務開發的所有方面,也幾乎針對所有開發常用的模式、中間件、數據庫進行了整合適配。

之前在聊互聯網架構模式的時候我談到過,很多時候我們寫一個業務把邏輯寫死寫出來是比較容易的,但是把這個邏輯提取成模式進而打包成一個框架來給大家使用,這是比較難的。因爲我們只有經歷過足夠多的場景後才能提取出普適的功能框架,大部分人才能用上,而且我們需要針對核心功能開放出可配置的部分,滿足小部分人進一步定製和擴展功能的需要。

Spring框架經歷了幾個階段:

1.第一個階段推出的Core、Security、Data是把單體應用開發服務好。不僅僅提供了便捷的數據庫訪問、Web MVC等必要功能,而且通過AOP、IOC兩大利器讓我們的程序內在能夠做到低耦合可擴展。

2.第二個階段推出的Boot的意義不僅僅是加速了開發效率而且能讓我們的程序從可用變爲好用,應用程序核心業務邏輯可能只有70%的工作量,要讓程序在線上跑的愉快還有30%的監控日誌打點等工作量需要去做。

3.第三個階段推出的Cloud的意義在於推動了微服務架構的落地。讓不具備開發微服務基礎套件的小型互聯網公司也能享受到免費的開箱即用的微服務解決方案。其實很多人不是看了微服務的架構思想去尋找解決方案,而是瞭解到了Spring Cloud纔去瞭解微服務思想從而落地的。

4.目前屬於第四個階段,大力發展Cloud Dataflow+容器。Dataflow的思想是不管是做實時消息處理的服務還是臨時運行的任務,都可以認爲是服務的組件,如果可以有一套DSL來定義這些組件之間的交互方式,然後在容器中進行自由組合、部署、伸縮,那麼架構會非常靈活。下圖是Dataflow管理界面的一個示意圖。

 

Spring的發展可以看到互聯網架構的發展,Spring給我們帶來相當多的技術啓發,從軟件設計模式的啓發慢慢到了架構的啓發,甚至我覺得Spring是爲Java開發打造了架構風格的模板,接下去Spring繼續發展2到3年有望成爲架構標準,我在想這個時候應用架構師何去何從?

 

2.2 什麼是SpringMVC?

2.2.1 簡介

Spring MVC是基於 Servlet 的一個 MVC 框架,主要解決 WEB 開發的問題。

2.2.2 用途介紹

Spring MVC是Spring的一部分,主要用於開發WEB應用和網絡接口,它是Spring的一個模塊,通過Dispatcher Servlet, ModelAndView 和 View Resolver,讓應用開發變得很容易。

一個典型的Spring MVC應用開發分爲下面幾步:
首先通過配置文件聲明Dispatcher Servlet:


 

通過配置文件聲明servlet詳情,如MVC resource,data source,bean等


 

若需添加其它功能,如security,則需添加對應配置:

 

增加業務代碼,如controller,service,model等,最後生成war包,通過容器進行啓動

2.2.3 SpringMVC常用註解

    @Controller

  負責註冊一個bean 到spring 上下文中
@RequestMapping

  註解爲控制器指定可以處理哪些 URL 請求
@RequestBody

  該註解用於讀取Request請求的body部分數據,使用系統默認配置的HttpMessageConverter進行解析,然後把相應的數據綁定到要返回的對象上 ,再把HttpMessageConverter返回的對象數據綁定到 controller中方法的參數上

@ResponseBody

   該註解用於將Controller的方法返回的對象,通過適當的HttpMessageConverter轉換爲指定格式後,寫入到Response對象的body數據區

@ModelAttribute    

  在方法定義上使用 @ModelAttribute 註解:Spring MVC 在調用目標處理方法前,會先逐個調用在方法級上標註了@ModelAttribute 的方法

  在方法的入參前使用 @ModelAttribute 註解:可以從隱含對象中獲取隱含的模型數據中獲取對象,再將請求參數 –綁定到對象中,再傳入入參將方法入參對象添加到模型中 

@RequestParam 

  在處理方法入參處使用 @RequestParam 可以把請求參 數傳遞給請求方法

@PathVariable

  綁定 URL 佔位符到入參
@ExceptionHandler

  註解到方法上,出現異常時會執行該方法
@ControllerAdvice

  使一個Contoller成爲全局的異常處理類,類中用@ExceptionHandler方法註解的方法可以處理所有Controller發生的異常

 

2.3 什麼是SpringBoot?

2.3.1 簡介

Spring Boot 是基於Spring的一套快速開發整合包。

Spring Boot 簡化了基於Spring的應用開發,只需要“run”就能創建一個獨立的、生產級別的Spring應用。Spring Boot爲Spring平臺及第三方庫提供開箱即用的設置(提供默認設置),這樣我們就可以簡單的開始。多數SpringBoot應用只需要很少的Spring配置。

2.3.2 用途介紹

Spring Boot的核心思想就是約定大於配置,一切自動完成。採用 Spring Boot可以大大的簡化你的開發模式,所有你想集成的常用框架,它都有對應的組件支持。你甚至都不用額外的WEB容器,直接生成jar包執行即可,因爲spring-boot-starter-web模塊中包含有一個內置tomcat,可以直接提供容器使用;基於Spring Boot,不是說原來的配置沒有了,而是Spring Boot有一套默認配置,我們可以把它看做比較通用的約定,而Spring Boot遵循的也是約定優於配置原則,同時,如果你需要使用到Spring以往提供的各種複雜但功能強大的配置功能,SpringBoot一樣支持

在Spring Boot中,你會發現你引入的所有包都是starter形式,如:

·  spring-boot-starter-web-services,針對SOAP Web Services

·  spring-boot-starter-web,針對Web應用與網絡接口

·  spring-boot-starter-jdbc,針對JDBC

·  spring-boot-starter-data-jpa,一套JPA應用框架

·  spring-boot-starter-cache,針對緩存支持

·  等等

Spring Boot對starter的解釋如下:

Starters are a set of convenient dependency descriptors that you can include in your application. You get a one-stop-shop for all the Spring and related technology that you need, without having to hunt through sample code and copy paste loads of dependency descriptors. For example, if you want to get started using Spring and JPA for database access, just include the spring-boot-starter-data-jpa dependency in your project, and you are good to go

 

這句話的譯意爲:

Starters是一系列極其方便的依賴描述,通過在你的項目中包含這些starter,你可以一站式獲得你所需要的服務,而無需像以往那樣copy各種示例配置及代碼,然後調試,真正做到開箱即用;比如你想使用Spring JPA進行數據操作,只需要在你的項目依賴中引入spring-boot-starter-data-jpa即可。

 

2.3.3 主要目標

1.爲所有Spring的開發提供一個從根本上更快的入門體驗

2.開箱即用,但通過自己設置參數,即可快速擺脫這種方式。

3.提供了一些大型項目中常見的非功能性特性,如內嵌服務器、安全、指標,健康檢測、外部化配置等

4.絕對沒有代碼生成,也無需 XML 配置。

 

2.4 什麼是SpringCloud?

2.4.1 簡介

SpringCloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用Spring Boot的開發風格做到一鍵啓動和部署。

2.4.2 Spring Cloud組成

Spring Cloud的子項目,大致可分成兩類,一類是對現有成熟框架”Spring Boot化”的封裝和抽象,也是數量最多的項目;第二類是開發了一部分分佈式系統的基礎設施的實現,如Spring Cloud Stream扮演的就是kafka, ActiveMQ這樣的角色。對於我們想快速實踐微服務的開發者來說,第一類子項目就已經足夠使用,如:

.Spring Cloud Netflix
  是對Netflix開發的一套分佈式服務框架的封裝,包括服務的發現和註冊,負載均衡、斷路器、REST客戶端、請求路由等。

.Spring Cloud Config
  將配置信息中央化保存, 配置Spring Cloud Bus可以實現動態修改配置文件

.Spring Cloud Bus
  分佈式消息隊列,是對Kafka, MQ的封裝

.Spring Cloud Security
  對Spring Security的封裝,並能配合Netflix使用

.Spring Cloud Zookeeper
  對Zookeeper的封裝,使之能配置其它Spring Cloud的子項目使用

.Spring Cloud Eureka

Spring Cloud Eureka 是 Spring Cloud Netflix 微服務套件中的一部分,它基於Netflix Eureka 做了二次封裝,主要負責完成微服務架構中的服務治理功能。

2.4.3  Spring Cloud架構

 我們從整體來看一下 Spring Cloud主要的組件,以及它的訪間流程
  1、外部或者內部的非 Spring Cloud目都統一通過API網關(Zuul)來訪可內部服務.
  2、網關接收到請求後,從註冊中心( Eureka)獲取可用服務
  3、由 Ribbon進行均負載後,分發到後端的具體實例
  4、徹服務之間通過 Feign進行通信處理業務
  5、 Hystrix負責處理服務超時熔斷
  6、 Turbine監控服務間的調用和焠斷相關指標

3 Spring和SpringMVC

1. spring是一個一站式的輕量級的java開發框架,核心是控制反轉(IOC)和麪向切面(AOP),針對於開發的WEB層(springMvc)、業務層(Ioc)、持久層(jdbcTemplate)等都提供了多種配置解決方案;

2. springMvc是spring基礎之上的一個MVC框架,主要處理web開發的路徑映射和視圖渲染,屬於spring框架中WEB層開發的一部分;

 

4 SpringMVC和SpringBoot

1. springMvc屬於一個企業WEB開發的MVC框架,涵蓋麪包括前端視圖開發、文件配置、後臺接口邏輯開發等,XML、config等配置相對比較繁瑣複雜;

2. springBoot框架相對於springMvc框架來說,更專注於開發微服務後臺接口,不開發前端視圖;

 

5 Spring,Spring MVC,Spring Boot 三者比較

這三者專注的領域不同,解決的問題也不一樣;總的來說,Spring 就像一個大家族,有衆多衍生產品例如 Boot,Security,JPA等等。但他們的基礎都是Spring 的 IOC 和 AOP,IOC提供了依賴注入的容器,而AOP解決了面向切面的編程,然後在此兩者的基礎上實現了其他衍生產品的高級功能;Spring MVC是基於 Servlet 的一個 MVC 框架,主要解決 WEB 開發的問題,因爲 Spring 的配置非常複雜,各種xml,properties處理起來比較繁瑣。於是爲了簡化開發者的使用,Spring社區創造性地推出了Spring Boot,它遵循約定優於配置,極大降低了Spring使用門檻,但又不失Spring原本靈活強大的功能,下面用一張圖來描述三者的關係:

 

6 SpringBoot和SpringCloud

 

1.Spring Boot使用了默認大於配置的理念,集成了快速開發的Spring多個插件,同時自動過濾不需要配置的多餘的插件,簡化了項目的開發配置流程,一定程度上取消xml配置,是一套快速配置開發的腳手架,能快速開發單個微服務;

2.SpringCloud大部分的功能插件都是基於SpringBoot去實現的,springCloud關注於全局的微服務整合和管理,將多個SpringBoot單體微服務進行整合以及管理;SpringCloud依賴於SpringBoot開發,而SpringBoot可以獨立開發;

 

7 結論

1.Spring 框架就像一個家族,有衆多衍生產品例如 boot、security、jpa等等。但他們的基礎都是Spring的ioc、aop等. ioc 提供了依賴注入的容器, aop解決了面向橫切面編程,然後在此兩者的基礎上實現了其他延伸產品的高級功能;

2.SpringMvc是基於Servlet 的一個MVC框架主要解決WEB開發的問題,因爲Spring的配置非常複雜,各種XML、JavaConfig、servlet處理起來比較繁瑣;

3.爲了簡化開發者的使用,從而創造性地推出了SpringBoot框架,默認優於配置,簡化了SpringMVC的配置流程;

但區別於SpringMVC的是,SpringBoot專注於微服務方面的接口開發,和前端解耦,雖然SpringBoot也可以做成SpringMVC前後臺一起開發,但是這就有點不符合SpringBoot框架的初衷了;

4.對於SpringCloud框架來說,它和SpringBoot一樣,注重的是微服務的開發,但是SpringCloud更關注的是全局微服務的整合和管理,相當於管理多個SpringBoot框架的單體微服務;

 

 

 

參考文獻

  1. 作者馬帥的博客 來源:CSDN
  2. 作者簡xiaoyao  來源:簡書
  3. 作者塵光掠影 來源:CSDN
  4. 作者鄭學煒 來源:CSDN
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章