摘 要: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;java
1 前言 web
對於一個Java開發者來講,Spring可謂如雷貫耳,不管是Spring框架,仍是Spring引領的IOC,AOP風格,都對後續Java開發產生的深遠的影響,同時,Spring社區總能及時響應開發者的需求,推出適應潮流發展的新功能特定;而對於大部分開發者而言,平時接觸最多的應該就是Spring MVC以及Spring Boot了,本文將分別對Spring,Spring MVC,Spring Boot以及SpringCloud作整體概述,並分析闡述它們各自想要解決的問題,以便初學者能更好的瞭解Spring及相關概念。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的初衷tomcat
一、JAVA EE開發應該更加簡單。
二、使用接口而不是使用類,是更好的編程習慣。Spring將使用接口的複雜度幾乎下降到了零。
三、爲JavaBean提供了一個更好的應用配置框架。
四、更多地強調面向對象的設計,而不是現行的技術如JAVA EE。
五、儘可能減小沒必要要的異常捕捉。
六、使應用程序更加容易測試。
2.1.3 Spring的目標
一、能夠使人方便愉快的使用Spring。
二、應用程序代碼並不依賴於Spring APIs。
三、Spring不和現有的解決方案競爭,而是致力於將它們融合在一塊兒。
2.1.4 Spring的基本組成
一、最完善的輕量級核心框架。
二、通用的事務管理抽象層。
三、JDBC抽象層。
四、集成了Toplink, Hibernate, JDO, and iBATIS SQL Maps。
五、AOP功能。
六、靈活的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主要的組件,以及它的訪間流程
一、外部或者內部的非 Spring Cloud目都統一經過API網關(Zuul)來訪可內部服務.
二、網關接收到請求後,從註冊中心( Eureka)獲取可用服務
三、由 Ribbon進行均負載後,分發到後端的具體實例
四、徹服務之間經過 Feign進行通訊處理業務
五、 Hystrix負責處理服務超時熔斷
六、 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框架的單體微服務;
參考文獻