JAVA學習路線之:Spring從懵逼到精通——Sping架構\依賴注入\應用切面

折翼之舞°發表於2020-12-11

關於Spring

Spring是一個開源框架,是為了解決企業應用程式開發複雜性而建立的。框架的主要優勢之一就是其分層架構,分層架構允許您選擇使用哪一個元件,同時為 J2EE 應用程式開發提供整合的框架。學習Spring是基礎課程。但是大多數同學都只知其然但是不知其所以然。在這裡我們就係統的來說一下Spring的點點滴滴吧。今天作為第一講,就來聊聊Spring到底做了啥。讓大家從懵逼的狀態下開始我們的Spring之旅。

在這裡插入圖片描述

Spring能夠激發POJO的潛能

很多框架通過強迫應用繼承他們的類或者實現它們的介面從而導致應用與框架綁死。一個典型的例子就是EJB的無狀態Session Bean。早期的EJB就是這樣的框架。

而在這方面Spring就做的很好。Spring竭力避免因為自身的API而弄亂你的程式碼。Spring不會強迫你實現Spring規範的介面或者繼承Spring規範的類。

在基於Spring構架你的應用中,它的類通常沒有任何痕跡表明你使用了Spring。最差情況就是一個會使用Spring註解的類。僅此而已。

Spring在對於POJO實行增強的方法就是用DI來裝配他們。

歡迎各位大佬進群共同交流學習,我們的交流分享群:1149778920 暗號:CSDN
博主在這裡給大家整理了包括但不限於:JAVA基礎和進階類、Spring、Spring boot、Spring MVC、MyBatis、MySQL、JVM等各種資料有,免費分享給各位進群的小夥伴

在這裡插入圖片描述

Sping架構

Spring框架是分模組存在,除了最核心的Spring Core Container(即Spring容器)是必要模組之外,其他模組都是可選,視需要而定。大約有20多個模組。

在這裡插入圖片描述
在這裡插入圖片描述

Spring3與Spring4是有區別的,4.0主要是對Java 8的新函式式語法進行支援,還有加強了對網路各種新技術比如http-streaming, websocket的更好的支援。

一般來說,Spring主要分為7個模組:

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

依賴注入(DI)

依賴注入聽起來很複雜。但是目前已經成為一個設計模式理念。在專案中使用DI的模式之後你會發現程式碼變得異常簡單並且容易理解和測試。

DI的實現:任何一個有意義的應用都會由兩個或者更多的類組成,這些類相互之間進行寫作來完成特定的業務邏輯。傳統的做法是:每個物件負責管理與自己相互寫作的物件的引用。DI的做法是:物件的依賴關係由系統中負責協調個物件的第三方元件在建立物件的時候進行設定。物件無需自行建立或者管理他們的依賴關係。依賴關係將被自動注入到需要他們的物件中。

在這裡插入圖片描述
DI帶來的最大收益就是——鬆耦合。如果一個物件只通過介面來表明依賴關係,這種依賴就能夠在物件本身毫不知情的情況下,用不同的具體實現進行替換。

對依賴進行替換的最常用方法就是在測試的時候是用mock來實現。

建立應用元件之間的寫作的行為通常我們成為裝配(wiring)。Spring有多種裝配bean的方式。可以使用XML來進行裝配。如果XML的配置不符合你的喜好,Spring還可以是用Java來描述配置檔案。只要在Java程式碼中打上@Configuration 和@Bean的標籤即可。

不管是使用基於XML的配置還是基於Java的配置,DI帶來的收益都是一樣的。

Spring通過應用上下文(Application Context)裝載bean的定義並把它們組裝起來。Spring應用上下文全權負責物件的建立和組裝。Spring自帶了多種應用上下文的實現,它們之間主要的區別僅僅是還在於如何載入配置。

應用切面(AOP)

DI能夠讓相互協作的軟體元件保持鬆散耦合,而面向切面變成(AOP)允許你把遍佈應用的各處的功能分離出來形成可重用的元件。

面向切面程式設計是為了促使軟體系統實現關注點的分離的技術。系統由許多不同的元件組成,每個元件各負責一塊特定功能。除了實現自身核心的功能之外。這些元件還經常承當額外的職責。例如:日誌、事務管理和安全這樣的功能。這些功能可以被稱為是關注點。

在這裡插入圖片描述

實現系統關注點功能的程式碼將會重複出現在多個元件中。* 元件會因為那些與自身核心業務無關的程式碼變得混亂。* AOP的作用就是使得這些服務模組化,並且以宣告的方式將它們應用到它們需要影響的元件中去。所造成的結果就是使得這些元件會具有更高的內聚性並且會更加關注自身的業務,完全不用瞭解涉及系統服務所帶來的複雜性。

在這裡插入圖片描述

在編碼時候經常遇到為了實現通用的和簡單的任務,不得不一遍遍的寫的重複的程式碼,稱之為樣板方的程式碼。比如JDBC就會有一大堆的樣本式的程式碼。

JDBC也不是產生樣板式程式碼的唯一場景。在許多程式設計場景中都有類似的樣板式程式碼,JMS、JNDI等也會大量的重複的程式碼。

Spring通過模板封裝來消除樣板式程式碼。Spring的JdbcTemplate就使得執行資料庫操作時不使用樣板式程式碼成為了可能。

最後

這一節簡單介紹了Spring,沒涉及到原理的東西。Spring如此博大精深,希望大家好好學習哈。

我特意整理了一下,裡面的技術不是靠幾句話就能講清楚,多問題其實答案很簡單,但是背後的思考和邏輯不簡單,要做到知其然還要知其所以然。如果想學習Java工程化、高效能及分散式、深入淺出。效能調優、Spring,MyBatis,Netty原始碼分析的朋友可以加我的Java進階群1149778920 暗號:CSDN
以下是部分資料截圖(所有資料均已整合成文件,pdf壓縮打包處理)。

在這裡插入圖片描述
在這裡插入圖片描述

相關文章