本篇內容包括:Spring/SpringFrame 概述、Spring IOC 和 AOP 概述、Spring 全家桶內容概述(包括:Spring Boot、Spring Cloud、Spring Cloud data flow …)等內容!
一、Spring/SpringFrame 概述
Spring 是一個生態體系(也可以說是技術體系),是集大成者,它包含了 Spring Framework、Spring Boot、Spring Cloud 等(還包括Spring Cloud data flow、spring data、spring integration、spring batch、spring security、spring hateoas),我們常提到的 IOC、AOP 等概念實際上是來源于 Spring Framework。
Spring Framewor 框架是 Java 平臺的一個開源的全棧(full-stack)應用程序框架和控制反轉容器實現,一般也被直接稱為 Spring。該框架的一些核心功能理論上可用于任何 Java 應用,但 Spring Framewor 還為基于 Java 企業版平臺構建的 Web 應用提供了大量的拓展支持。Spring Framewor 沒有直接實現任何的編程模型,但它已經在 Java 社區中廣為流行,基本上完全代替了企業級 JavaBeans(EJB)模型。
Spring Framewor 框架以 Apache License 2.0 開源許可協議的形式發布,該框架最初由 Rod Johnson 以及 Juergen Hoeller 等人開發。
Spring 官方對 Spring Framework 簡短描述:為依賴注入、事務管理、WEB應用、數據訪問等提供了核心的支持。Spring Framework 專注于企業級應用程序的“管道”,以便開發團隊可以專注于應用程序的業務邏輯。
Ps:千萬不要把 Spring 和 Spring Framework 搞混淆了,很多文章都錯誤的定義了 spring:spring 是一個一站式的輕量級的 Java開發框架,核心是控制反轉(IoC)和面向切面(AOP),針對于開發的 Web層(springMVC)、業務層(IoC)、持久層等都提供了多種配置解決方案。這是 Spring Framework 的定義,至于 Spring,是整個生態。
二、Spring IOC 和 AOP 概述
1、IOC
IoC(Inversion of control )即“控制反轉”,它是一種設計思想而非一個技術實現。描述了 Java 開發領域對象的創建以及管理的問題。通過 Spring 來管理對象的創建、配置和生命周期,這樣相當于把控制權交給了 Spring,不需要人工來管理對象之間復雜的依賴關系,這樣做的好處就是解耦。
- 傳統的開發方式 :往往是在類 A 中手動通過 new 關鍵字來 new 一個 B 的對象出來;
- 使用 IoC 思想的開發方式 :不通過 new 關鍵字來創建對象,而是通過 IoC 容器(Spring 框架) 來幫助我們實例化對象。我們需要哪個對象,直接從 IoC 容器里面過去即可
從以上兩種開發方式的對比來看:我們 “喪失了一個權力” (創建、管理對象的權力),從而也得到了一個好處(不用再考慮對象的創建、管理等一系列的事情)
- 控制了什么:控制了對象(創建、實例化、管理的權力)
- 反轉了什么 :反轉了控制權,控制權交給外部環境(Spring 框架、IoC 容器)
2、AOP
AOP(Aspect oriented programming),即面向切面編程,它是一個編程范式,是 OOP(面向對象編程)的一種延續,目的就是提高代碼的模塊性。
Spring AOP 基于動態代理的方式實現,如果是實現了接口的話就會使用 JDK 動態代理,反之則使用 CGLIB 代理,Spring中 AOP 的應用主要體現在 事務、日志、異常處理等方面,通過在代碼的前后做一些增強處理,可以實現對業務邏輯的隔離,提高代碼的模塊化能力,同時也是解耦。Spring主要提供了 Aspect 切面、JoinPoint 連接點、PointCut 切入點、Advice 增強等實現方式。
三、Spring 全家桶內容概述
1、Spring Boot
但是,無論 Spring Framework 接口如何簡化,設計如何優美,始終無法擺脫被動的境況:由于它自身并非容器,所以基本上不得不隨 JavaEE 容器啟動而裝載,例如 Tomcat、Jetty、JBoss 等。然而 Spring Boot 的出現,改變了 Spring Framework 甚至整個 Spring 技術體系的現狀(摘自小馬哥的《SpringBoot編程思想》)。
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 的設計是約定大于實現的。
2、Spring Cloud
Spring Cloud 事實上是一整套基于 Spring Boot 的微服務解決方案。它為開發者提供了很多工具,用于快速構建分布式系統的一些通用模式,例如:配置管理、注冊中心、服務發現、限流、網關、鏈路追蹤等。
3、Spring Cloud data flow
Data flow 是一個用于開發和執行大范圍數據處理其模式包括ETL,批量運算和持續運算的統一編程模型和托管服務。對于在現代運行環境中可組合的微服務程序來說,spring cloud data flow是一個原生云可編配的服務。
使用 spring cloud data flow,開發者可以為像數據抽取,實時分析,和數據導入/導出這種常見用例創建和編配數據通道 (data pipelines)。
Spring cloud data flow 是基于原生云對 spring XD的重新設計,該項目目標是簡化大數據應用的開發。
Spring XD 的流處理和批處理模塊的重構分別是基于 spring boot的stream 和 task/batch 的微服務程序。這些程序現在都是自動部署單元而且他們原生的支持像 Cloud Foundry、Apache YARN、Apache Mesos和Kubernetes 等現代運行環境。
Spring cloud data flow 為基于微服務的分布式流處理和批處理數據通道提供了一系列模型和最佳實踐。
4、Spring Data
Spring Data 是Spring 的一個子項目, 旨在統一和簡化對各類型持久化存儲, 而不拘泥于是關系型數據庫還是NoSQL 數據存儲。無論是哪種持久化存儲, 數據訪問對象(或稱作為DAO,即Data Access Objects)通常都會提供對單一域對象的CRUD (創建、讀取、更新、刪除)操作、查詢方法、排序和分頁方法等。Spring Data 則提供了基于這些層面的統一接口(CrudRepository,PagingAndSortingRepository)以及對持久化存儲的實現。
5、Spring Integration
Spring Integration 在基于 Spring 的應用程序中實現輕量級消息傳遞,并支持通過聲明適配器與外部系統集成。 Spring Integration的主要目標是提供一個簡單的模型來構建企業集成解決方案,同時保持關注點的分離,這對于生成可維護,可測試的代碼至關重要。Spring Framework鼓勵開發人員使用接口進行編碼,并使用依賴注入(DI)為普通舊Java對象(POJO)提供執行其任務所需的依賴項。 Spring Integration 將這一概念更進一步,其中POJO使用消息傳遞范例連接在一起,并且各個組件可能不了解應用程序中的其他組件。這種應用程序是通過組裝細粒度可重用組件來構建的,以形成更高級別的功能。通過精心設計,這些流程可以模塊化,并在更高的層次上重復使用。
6、Spring Batch
Spring Batch 是一個輕量級的、完善的批處理框架,旨在幫助企業建立健壯、高效的批處理應用。Spring Batch 是 Spring的一個子項目,使用Java語言并基于Spring框架為基礎開發,使得已經使用 Spring 框架的開發者或者企業更容易訪問和利用企業服務。
Spring Batch 提供了大量可重用的組件,包括了日志、追蹤、事務、任務作業統計、任務重啟、跳過、重復、資源管理。對于大數據量和高性能的批處理任務,Spring Batch 同樣提供了高級功能和特性來支持,比如分區功能、遠程功能。總之,通過 Spring Batch 能夠支持簡單的、復雜的和大數據量的批處理作業。
7、Spring Security
Spring Security 是一個能夠為基于Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在 Spring 應用上下文中配置的 Bean,充分利用了 Spring IoC,DI(控制反轉 Inversion of Control ,DI:Dependency Injection 依賴注入)和 AOP(面向切面編程)功能,為應用系統提供聲明式的安全訪問控制功能,減少了為企業系統安全控制編寫大量重復代碼的工作。