Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新


簡介

是什么讓java世界變得更好,程序員變得更友愛,禿頭率變得不是那么的高,讓程序員不必再每天996,有時間找個女朋友?

是Spring。

是什么讓企業級java應用變得簡單易懂,降低了java程序員的進入門檻,導致了現在遍地都是java程序員的窘境?

是Spring。

是什么從無冕之王變成了事實上的企業標准,讓規則制定者也要顫抖幾分?

是Spring。

簡單的說,Spring滿足了你們對於java程序的所有想象。是個java程序員都會投入Spring的懷抱。

今天這篇文件就是對Spring基礎的總結。文末附有小彩蛋,歡迎大家向后拉!

Spring基礎

Spring是在2003年,作為對之前的復雜的J2EE規范而產生的。有些人認為Spring和J2EE是競爭關系,實際上他們是互補的。

Spring最新版本是5.3.0, 通過使用Spring,我們可以很方便的創建企業級應用程序。同時Spring還提供了對groovy和Kotlin的支持。在Spring5.1之后,需要JDK8以上才能正確運行。

更多內容請訪問www.flydean.com

狹義的Spring指的是Spring基礎,如下圖所示的Spring Framework Runntime:

廣義的Spring是指整個Spring家族,包括Spring Boot,Spring Cloud等等項目。

這里我們探討的是狹義上的Spring Framework。它可以分為下面幾個模塊:

  1. Core - Core是Spring得以運行的核心,主要包括IoC Container, Events, Resources, i18n, Validation, Data Binding, Type Conversion, SpEL, AOP等內容。
  2. Testing - 測試是Spring中非常重要的一個模塊,主要包括Mock Objects, TestContext Framework, Spring MVC Test, WebTestClient等內容。
  3. Data Access - 這一部分是對數據庫的訪問相關,包括Transactions, DAO Support, JDBC, O/R Mapping, XML Marshalling等內容。
  4. Web Servlet - 傳統的對Web Servlet的支持,包括Spring MVC, WebSocket, SockJS, STOMP Messaging等內容。
  5. Web Reactive - 這是Spring5新增的對於響應式系統的支持,包括Spring WebFlux, WebClient, WebSocket等。
  6. Integration - 是對第三方系統的支持,包括Remoting, JMS, JCA, JMX, Email, Tasks, Scheduling, Caching等常用的第三方系統。
  7. Languages - 最后是對其他JVM語言的支持,包括Kotlin, Groovy等動態語言。

Spring Framework被分成了很多個模塊,我們在構建應用程序的時候可以自由選擇使用哪個模塊。最核心的模塊是核心容器:包括配置模塊和依賴注入機制。除此之外,Spring Framework提供了對不同應用架構的基礎支持,包括消息,交易數據,存儲和網站。他還包括了Servlet-based Spring MVC web framework和最新的響應式Spring WebFlux reactive web framework。

Core核心技術

Spring的核心技術是Spring中最為重要的內容,而Core中最最中的就是Spring框架的反轉控制(IOC)容器。

通過在Spring中使用面向方面編程(AOP)技術,IOC在Spring中得到了全面的應用。並且Spring搭建了自己的AOP框架,同時Spring還提供了對第三方AOP框架AspectJ的集成,從而滿足不同需求的用戶的使用。

IOC也稱為依賴注入(DI)。它是指對象僅通過構造函數參數、工廠方法的參數或從工廠方法構造或返回對象實例后,通過在其上設置的屬性來定義其依賴項(即與之一起工作的其他對象)的過程。當容器在創建bean時將會注入這些依賴項。

這個過程跟bean自己控制實例化,或者通過直接構造類或服務定位器模式來定位其依賴項的方式相反(因此稱為控制反轉)。

Bean在Spring中就是一個業務組件,我們通過創建各種Bean來完成最終的業務邏輯功能。

在容器內部,每個bean的定義可以被表示為BeanDefinition,通過BeanDefinition可以獲得bean的很多信息包括:包名,bean的作用域,生命周期,bean的引用和依賴等。

從最開始的面向過程編程,到后面的面向對象編程,程序的編寫方式發生了重大的變化,面向對象編程將業務邏輯封裝成一個一個的對象,所有的操作都轉換為對對象的操作。

面向對象編程現在使用的非常普遍,一般來說只要是高級語言都支持,但是它也有缺點,比如如果我們想做一些橫跨對象的操作(如統計各個對象里面某個方法的執行時間),這時候面向對象可以能力有不逮。我們可能需要在每個對象里面都添加一些統計時間的代碼,那么有沒有更好的方法來處理這個問題呢?

面向方面編程(AOP)通過提供對程序結構的另一種思考方式來補充面向對象編程(OOP)。OOP中模塊化的關鍵單元是類,而AOP中模塊化的單元是方面。方面支持跨多個類型和對象的關注點(如事務管理)的模塊化。(在AOP文獻中,這種關注通常被稱為“橫切”關注。)

通常來說一個Bean包含一個默認的無參構造函數,和屬性的get,set方法。

org.springframework.beans 包里面有個很重要的類叫做BeanWrapper接口和他的實現BeanWrapperImpl,BeanWrapper提供了設置和獲取屬性值(單個或批量)、獲取屬性描述符和查詢屬性的功能,以確定它們是可讀的還是可寫的。

此外,BeanWrapper還支持嵌套屬性,允許將子屬性的屬性設置為無限深度。BeanWrapper還支持添加標准JavaBeans屬性PropertyChangeListeners和VetoableChangeListeners,而不需要在目標類中支持代碼。最后,BeanWrapper提供了對設置索引屬性的支持。BeanWrapper通常不直接由應用程序代碼使用,而是由DataBinder和BeanFactory使用。

Spring提供了很方便的事件的處理機制,包括事件類ApplicationEvent和事件監聽類ApplicationListener。 他實現的是設計者模式,如果實現了ApplicationListener接口的bean部署到Spring容器中,則每次ApplicationEvent發布到ApplicationContext時,都會通知該bean。

SpEL的全稱叫做Spring Expression Language。通常是為了在XML或者注解里面方便求值用的,通過編寫#{ }這樣的格式,即可使用。

Spring定義了Resource接口用來對資源的訪問,一般來說資源有兩種形式,一種是URL的形式從外部鏈接加載,一種是File的形式從系統本身查找。

Testing測試

Spring團隊提倡測試驅動開發(TDD)。 Spring團隊發現正確使用控制反轉(IoC)肯定會使單元測試和集成測試更容易(因為類的setter方法和適當的構造函數的存在使得它們更容易在測試中連接在一起而不必設置服務定位器注冊表和類似結構)。

例子待續...

Data Access

通過Spring可以方便的進行事物管理,並且為各種數據訪問技術(例如JDBC,Hibernate或JPA)提供了一致性的DAO接口,從而可以輕松地在上述持久性技術之間進行切換,不需要考慮對各種數據訪問技術的適配問題。

例子待續...

Web Servlet

Spring提供了Spring MVC框架來實現對web的支持,與其他許多Web框架一樣,Spring MVC圍繞前端控制器模式進行設計,在該模式下,中央Servlet DispatcherServlet提供了用於請求處理的共享算法,而實際工作是由可配置的委托組件執行的。 該模型非常靈活,並支持多種工作流程。

與任何Servlet一樣,都需要根據Servlet規范使用Java配置或在web.xml中聲明和映射DispatcherServlet。 反過來,DispatcherServlet使用Spring配置發現請求映射,視圖解析,異常處理等所需的委托組件。

Web Reactive

除了對於傳統的Web Servlet的支持以外,Spring還引入了WebFlux框架和響應式WebClient,實現了對reactive系統的支持。

WebFlux框架是非阻塞的,需要在並在Netty,Undertow和Servlet 3.1+容器等服務器上運行。

例子待續...

總結

曾經的我很幼稚的花了幾個月的時間,一句話一句話的來翻譯官方的Spring 5.x文檔,現在這里奉獻給大家,歡迎大家下載,可以的話大家關注我一下,給我點個贊,謝謝了:

Spring Framework 5.x中文指南

不想下載的朋友可以通過這個鏈接直接閱讀 Spring-Framework-Documentation中文文檔閱讀鏈接

本文鏈接:http://www.flydean.com/spring5/

最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!

歡迎關注我的公眾號:「程序那些事」,懂技術,更懂你!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM