第1章-Spring的模塊與應用場景

来源:https://www.cnblogs.com/code-artist/archive/2022/11/26/spring-1.html
-Advertisement-
Play Games

Spring 框架可以為 Java 應用程式開發提供全面的基礎設施支持,它是現在非常流行的 Java 開源框架,對於一個 Java 開發人員來說,熟練掌握 Spring 是必不可少的。 ...


目錄

Spring 框架可以為 Java 應用程式開發提供全面的基礎設施支持,它是現在非常流行的 Java 開源框架,對於一個 Java 開發人員來說,熟練掌握 Spring 是必不可少的。

控制反轉(IoC)和依賴註入(DI)

IoC/DI 是 Spring 的核心設計模式,它的所有組件和功能,都是基於這一模式設計的。IoC 意味著你設計好的對象交給容器控制,而不是在你的對象內部直接控制,而各個對象之間的依賴關係,是在容器運行期間決定的,容器動態地將依賴關係註入到組件中,且不關心具體的對象或資源來自何處,這大大降低了對象間的耦合度。

一、Spring模塊

Spring 框架的模塊:
image

1. 核心模塊

名稱 功能
spring-core 提供 IoC 和 DI 等功能
spring-beans 提供 Bean 容器等功能
spring-context 基於 core 和 beans 模塊構建,擴展了功能
spring-context-support 支持整合第三方工具
spring-expression 提供 SpEL 表達式支持

2. AOP模塊

名稱 功能
spring-aop 提供 AOP(面向切麵編程)支持
spring-aspects 提供 AspectJ 的集成
spring-instrumentation 提供類植入和類載入器的實現

3. 消息模塊

名稱 功能
spring-messaging 提供消息功能支持

4. 數據訪問模塊

名稱 功能
spring-jdbc 提供 JDBC 抽象層來代替原生 JDBC 功能
spring-tx 提供編程式和聲明式事務管理
spring-orm 提供主流的 ORM 框架 API 支持
spring-oxm 提供支持對象/XML映射抽象層
spring-jms 提供支持生產和消費的消息功能

5. Web模塊

名稱 功能
spring-web 提供 Web 功能支持
spring-webmvc 提供 Web 應用程式的 MVC 和 REST Web Services 支持
spring-websocket 提供 Web Socket 支持

6. 測試模塊

名稱 功能
spring-test 提供 JUnit 或 TestNG 等主流單元測試框架的集成

二、集成功能

Spring 對一些常用的功能組件都會基於 IoC/DI 模式來進行封裝,簡化其使用方式,以便開發人員開箱即用,不僅可以提高開發效率,還降低了耦合,提高了測試性和可移植性。

1. 目標原則

目標:

  • 為複雜的企業集成解決方案提供簡單的模型
  • 便於開發基於非同步、消息驅動行為的應用
  • 使現有 Spring 用戶更直觀、更循序漸進地使用

原則:

  • 降低組件的耦合度,增加了模塊化和可測試性
  • 強制區分業務邏輯和組件集成邏輯
  • 擴展點是抽象的,增加了擴展性和可移植性

2. 支持組件

Endpoint
AMQP
Spring ApplicationEvent
File 
FTP/FTPS Adapters
HTTP
JDBC
JPA
JMS
Mail
MongoDb
MQTT
Redis
Resource
RMI
RSocket
SFTP Adapters
STOMP
Stream
Syslog
TCP and UDP
WebFlux
WebSockets
Web Services
XML
Zookeeper

三、應用場景

Spring 框架由多個模塊構成,它不是一個全有或者全無的解決方案,我們完全可以按照需求使用它的全部或者部分特性。

1. 典型完整的 Spring Web 應用程式

image

Spring 完整使用場景:基於 Tomcat Servlet 容器,Web 層、業務層和數據持久層都使用 Spring 模塊實現。

2. 使用第三方 Web 框架的應用程式

image

整合第三方 Web 框架:基於 Tomcat Servlet 容器,Web 層使用 Struts 等其他框架,業務層和數據持久層都使用 Spring 模塊實現。

3. 基於 RPC 的應用程式

image

RPC 應用程式:基於 Tomcat Servlet 容器,使用Spring的 Hessian-,Rmi- 或HttpInvokerProxyFactoryBean 類構建遠程調用程式。

4. 基於 EJB 的應用程式

image

EJB 應用程式:Spring 提供訪問層和抽象層來管理 EJB。

比如我們通常使用的 SSM 框架和 SSH 框架就是 Spring 框架和第三方框架的組合形式:

Web 層 業務層 數據持久層
SSM SpringMVC Spring MyBatis
SSH Struts Spring Hibernate

不管我們怎麼搭建應用程式框架,Spring 都能很好的集成到我們應用程式中。

本文來自博客園,作者:碼匠_CodeArtist,轉載請註明原文鏈接:https://www.cnblogs.com/code-artist/p/spring-1.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Lambda 表達式(Lambda Expression),相信大家對 Lambda 肯定是很熟悉的,畢竟我們數學上經常用到它,即 λ 。不過,感覺數學中的 Lambda 和編程語言中的 Lambda 表達式沒啥關係,要說有關係就是都有 Lambda 這個詞,噢!當然還有一個關係就是 Lambda ... ...
  • 1.匿名函數 # 1.匿名函數lambda # 簡化代碼 減少占用的記憶體 print('1.匿名函數lambda') def func(): print(10) func() func = lambda: print(10) # 出現警告的原因是: # 因為你把lambda表達式賦給了另一個變數。 ...
  • Matplotlib初相識 認識matplotlib Matplotlib是一個Python 2D繪圖庫,能夠以多種硬拷貝格式和跨平臺的互動式環境生成出版物質量的圖形,用來繪製各種靜態,動態,互動式的圖表 一個最簡單的繪圖例子 matplotlib的圖像都是畫在對應的figure上,可以認為是一個繪 ...
  • 好家伙,前端出了點bug 我們來搞定後端先: 後端我們用的框架是Spring boot 資料庫:MySQl 代碼已開源,連接在最後 新建項目: 只點Java Web 項目目錄如下: 1.首先,我們在pom.xml文件中導入第三方包: web服務,mysql連接驅動等一系列包 pom.xml文件: < ...
  • 大小端的原理 對於一個由2個位元組組成的16位整數,在記憶體中存儲這兩個位元組有兩種方法:一種是將低序位元組存儲在起始地址,這稱為小端位元組序;另一種方法是將高序位元組存儲在起始地址,這稱為大端位元組序。即 大端是高位元組存放到記憶體的低地址 小端是高位元組存放到記憶體的高地址 假如現有一32位int型數0x123456 ...
  • typimg是一款為typora編輯器提供圖像自定義上傳服務的工具,該工具將在typora中輸入的網路圖片、本地圖片、剪貼板圖片/截圖上傳到博客園,支持在MacOS、Windiws、Linux三個平臺上運行。 ...
  • 一.小結 1.使用二維數組來存儲表格 2.可以使用以下語法來聲明二維數組變數: 元素類型[ ] [ ]數組變數 3.可以使用以下語法來創建二維數組變數: new 元素類型 [行的個數][列的個數] 4.使用下麵的語法表示二維數組中的每個元素: 數組變數[行下標][列的個數] 5.可使用數組初始化語法 ...
  • 前言 本篇是c++總結的第二篇,關於c++的對象模型,在構造、拷貝虛函數上重點分析,也包含了c++11class的新用法和特性,如有不當,還請指教! c++三大特性 訪問許可權 ​ 在c++中通過public、protected、private三個關鍵字來控製成員變數和成員函數的訪問許可權,它們分別表示 ...
一周排行
    -Advertisement-
    Play Games
  • 背景 在瀏覽器中訪問本地靜態資源html網頁時,可能會遇到跨域問題如圖。 是因為瀏覽器預設啟用了同源策略,即只允許載入與當前網頁具有相同源(協議、功能變數名稱和埠)的內容。 WebView2預設情況下啟用了瀏覽器的同源策略,即只允許載入與主機相同源的內容。所以如果我們把靜態資源發佈到iis或者通過node ...
  • 最近看幾個老項目的SQL條件中使用了1=1,想想自己也曾經這樣寫過,略有感觸,特別拿出來說道說道。編寫SQL語句就像炒菜,每一種調料的使用都會影響菜品的最終味道,每一個SQL條件的加入也會影響查詢的執行效率。那麼 1=1 存在什麼樣的問題呢?為什麼又會使用呢? ...
  • 好久不見,我又回來了。 給大家分享一個我最近使用c#代碼操作ftp伺服器的代碼示例: 1 public abstract class FtpOperation 2 { 3 /// <summary> 4 /// FTP伺服器地址 5 /// </summary> 6 private string f ...
  • 一:背景 1. 講故事 過年喝了不少酒,腦子不靈光了,停了將近一個月沒寫博客,今天就當新年開工寫一篇吧。 去年年初有位朋友找到我,說他們的系統會偶發性崩潰,在網上也發了不少帖子求助,沒找到自己滿意的答案,讓我看看有沒有什麼線索,看樣子這是一個牛皮蘚的問題,既然對方有了dump,那就分析起來吧。 二: ...
  • 自己製作的一個基於Entity Framework Core 的資料庫操作攔截器,可以列印資料庫執行sql,方便開發調試,代碼如下: /// <summary> /// EF Core 的資料庫操作攔截器,用於在資料庫操作過程中進行日誌記錄和監視。 /// </summary> /// <remar ...
  • 本文分享自華為雲社區《Go併發範式 流水線和優雅退出 Pipeline 與 Cancellation》,作者:張儉。 介紹 Go 的併發原語可以輕鬆構建流數據管道,從而高效利用 I/O 和多個 CPU。 本文展示了此類pipelines的示例,強調了操作失敗時出現的細微之處,並介紹了乾凈地處理失敗的 ...
  • 在上篇文章中,我們介紹到在多線程環境下,如果編程不當,可能會出現程式運行結果混亂的問題。出現這個原因主要是,JMM 中主記憶體和線程工作記憶體的數據不一致,以及多個線程執行時無序,共同導致的結果。 ...
  • 1、下載安裝包首先、進入官網下載安裝包網址:https://www.python.org/downloads/windows/下載步驟:進入下載地址,根據自己的電腦系統選擇相應的python版本 選擇適配64位操作系統的版本(查看自己的電腦操作系統版本), 點擊下載安裝包 也可以下載我百度雲分享的安 ...
  • 簡介 git-commit-id-maven-plugin 是一個maven 插件,用來在打包的時候將git-commit 信息打進jar中。 這樣做的好處是可以將發佈的某版本和對應的代碼關聯起來,方便查閱和線上項目的維護。至於它的作用,用官方說法,這個功能對於大型分散式項目來說是無價的。 功能 你 ...
  • 序言 在數字時代,圖像生成技術正日益成為人工智慧領域的熱點。 本討論將重點聚焦於兩個備受矚目的模型:DALL-E和其他主流AI繪圖方法。 我們將探討它們的優勢、局限性以及未來的發展方向。通過比較分析,我們期望能夠更全面地瞭解這些技術,為未來的研究和應用提供啟示。 Q: 介紹一下 dall-e Ope ...