深入解析Spring基本概念和核心思想

文章目錄

  • 基本概念
    • IoC
      • Ioc容器
      • IoC理解
      • IoC的步驟
      • Spring中使用ioc的步驟
    • Aop
      • Aop的理解
      • Aop的步驟
    • 控制反轉
      • 誰控制誰? 控制什么?為何叫反轉(對應于正向)?哪些方面反轉了?為何需要反轉?
    • 依賴
      • 什么是依賴(按名稱理解、按動詞理解)? 誰依賴于誰? 為什么需要依賴? 依賴什么東西?
    • 注入
      • 誰注入于誰? 注入什么東西? 為何要注入?
    • 依賴注入和控制反轉是同一概念嗎
    • IoC/DI是什么
      • IoC/DI是什么?能做什么?怎么做?用在什么地方?
    • 什么是外部資源
    • 數據訪問
    • Wed開發

基本概念

  1. 使用spring后,被spring管理的類,不需要再new。
  2. 要想類被spring管理,則需要通過bean的方式,把類引入到spirng的配置文件中。

IoC

Ioc容器

簡單的理解就是: 實現IoC思想,并提供對象創建,對象裝配以及對象生命周期管理的軟件就是Ioc容器

IoC理解

  1. 應用程序無需主動new對象,而是描述對象如何被創建
  2. 應用程序不需要主動裝配對象之間的依賴關系,而是描述需要那個服務,IoC容器會幫你裝配,被動接受裝配
  3. 主動變被動,是一種讓服務消費者不一直接依賴于服務提供者的組件設計方式,是一種減少類與類之間依賴的設計原則

IoC的步驟

Spring的主要通過bean標簽來實現IOC。

<!-- id屬性給這個bean指定一個唯一的名,供spring的其他組件來引用 class屬性指定bean的全路徑
-->
<bean id="hello" class="com.hello.Hello"><!--property通過set方法給對應的屬性設置值value屬性可以直接設置值ref屬性引用其他的組件--><property name="who" value="t6041"></property><property name="ink" ref="inkColor"></property>
</bean>

Spring中使用ioc的步驟

  1. 創建類
  2. 通過bean標簽把bean放到spring中
  3. 初始化spring配置文件拿到spring的上下文,通過spring的上下文獲取對應的bean。

Aop

Aop的理解

將復雜的要求分解出不同方面,將散布在系統中的"公共功能" “集中解決”
采用代理機制組裝起來運行,在 “不改變源程序” 的基礎上對代碼段進行增強處理,增加新的功能

Aop的步驟

  1. 創建一個增強。并納入spring的容器中。使普通類變成增強。
    • 使用類似aop:before標簽把普通變成增強
    • 實現BeforeAdvice接口也可以把普通類變成增強
<bean id="loggerAdvice" class="com.advice.LoggerAdvice"></bean>
  1. 創建切入點。
<aop:pointcut expression="execution(public void print())" id="pointcut"/>
  1. 定義切面。包涵增強的方法和切入點。
<aop:aspect ref="loggerAdvice"><aop:before method="before" pointcut-ref="pointcut"/>
</aop:aspect>

控制反轉

誰控制誰? 控制什么?為何叫反轉(對應于正向)?哪些方面反轉了?為何需要反轉?

  1. 誰控制誰? -->loC/DI容器控制應用程序
  2. 控制什么? -->IoC/DI容器控制對象本身的創建、實例化; IoC/DI容器控制對象之間的依賴關系
  3. 為何叫反轉(對應于正向)? -->因為現在應用程序不能主動去獲取外部資源了,而是被動等待IoC/DI容器給它注入它所需要的資源,所以稱為反轉
  4. 那些方面反轉了? -->1.創建對象 2.程序獲取資源的方式反了
  5. 為何需要反轉? -->1引入IoC/DI容器過后體系更為松散,而且管理更有序; 2.類之間真正實現了松散耦合

依賴

什么是依賴(按名稱理解、按動詞理解)? 誰依賴于誰? 為什么需要依賴? 依賴什么東西?

  1. 什么是依賴(按名稱理解、按動詞理解)? -->依賴(按名理解):依賴關系; 依賴(按動詞理解)依賴的動作
  2. 誰依賴誰? -->應用程序依賴于IoC/DI容器
  3. 為什么需要依賴? -->因為發生了反轉,應用程序依賴的資源都是IoC/DI容器里面
  4. 依賴什么東西? -->應用程序依賴于IoC/DI容器,依賴IoC/DI容器為它注入所需的資源

注入

誰注入于誰? 注入什么東西? 為何要注入?

  1. 誰注入于誰? -->IoC/DI容器注入于應用程序
  2. 注入什么東西? -->注入應用程序需要的外部資源,比如關系依賴
  3. 為何要注入? -->因為程序要正常運行需要這些外部資源

依賴注入和控制反轉是同一概念嗎

不是同一概念,其實他們兩個描述的是同一件事件,但是是從不同角度來說: 控制反轉從IoC/DI容器的角度; 依賴注入是從應用程序的角度

  1. 控制反轉的描述: IoC/DI容器反過來控制應用程序,控制應用程序所需要的外部資源(比如: 外部資源)
  2. 依賴注入描述: 應用程序依賴IoC/DI容器,依賴注入他所需的外部資源

IoC/DI是什么

IoC/DI是什么?能做什么?怎么做?用在什么地方?

  1. IoC/DI是什么
    • IoC: 就是使用IoC/DI容器反過來控制應用程序所需要的外部資源,這樣的一種程序開發思想
    • DI: 就是應用程序依賴IoC/DI容器來注入所需的外部資源,這樣一種程序開發的思想
  2. 能做什么 -->松散耦合對象
  3. 怎么做 -->使用Spring框架,里面有實現好了的IoC/DI容器
  4. 用在什么地方 -->凡是程序里面需要外部資源的情況,都可以考慮使用IoC/DI容器

什么是外部資源

對于一個類來講,所謂的外部資源,就是指在自己類不能得到或實現的東西,比如說: 在一個類里面要讀取配置文件,那么這個配置文件就相當于這個類的外部資源,又比如: A類里面調用B類,那么對于A類來講B類就是外部資源

數據訪問

Spring提供了對各種數據訪問技術的支持,包括JDBC、ORM(對象關系映射)框架(如Hibernate、MyBatis)、事務管理等。它提供了一種統一的訪問數據的方式,并且可以方便地切換或組合不同的數據訪問技術。

  1. JDBC:Spring提供了JdbcTemplate類來簡化JDBC操作,包括連接管理、異常處理和事務管理等
  2. ORM(對象關系映射):Spring提供了對ORM框架的集成支持,包括Hibernate、JPA、MyBatis等。通過Spring的ORM支持,可以更方便地進行數據庫操作,不需要編寫繁瑣的數據庫訪問代碼
  3. 事務管理:Spring提供了對事務的封裝和管理,包括編程式事務和聲明式事務兩種方式。通過使用Spring的事務管理支持,可以簡化事務的使用,提高代碼的可維護性和可讀性。
  4. 數據庫連接池:Spring提供了對常見數據庫連接池的集成支持,例如C3P0、HikariCP等。通過使用Spring的數據庫連接池,可以更高效地管理連接資源,提高應用的性能和可擴展性。
  5. NoSQL數據庫:Spring提供了對一些NoSQL數據庫的集成支持,例如MongoDB、Redis等。通過Spring的支持,可以更方便地操作這些NoSQL數據庫,實現數據的持久化和緩存。

Wed開發

Web是Spring框架中用于開發Web應用程序的模塊。它提供了一組功能強大的類和工具,用于簡化Web應用程序的開發和管理。

  1. MVC(模型-視圖-控制器)架構:Spring Web提供了基于MVC架構的Web框架,通過定義和組織控制器、視圖和模型,使得開發人員可以更容易地實現業務邏輯和界面交互的分離。
  2. 請求處理:Spring Web提供了多種方式來處理HTTP請求,包括基于注解的請求映射、路徑變量、請求參數的綁定、請求驗證和錯誤處理等。開發人員可以根據具體需求選擇最合適的請求處理方式。
  3. 視圖渲染:Spring Web支持多種視圖技術,包括JSP、Thymeleaf、Freemarker等,開發人員可以根據具體需求選擇合適的視圖渲染方式。
  4. 表單處理:Spring Web提供了表單處理的支持,包括表單數據的綁定、驗證、錯誤處理和表單重復提交的防御等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41437.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41437.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41437.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vscode如何漢化

首先我們到vscode官網下載 鏈接如下&#xff1a; Visual Studio Code - Code Editing. Redefined 根據自己需要的版本下載就好 下載并且安裝完畢之后 運行vscode 然后按快捷鍵 CTRLSHIFTX 打開安裝擴展界面 搜索簡體中文 安裝就可以了 謝謝大家觀看

npm ERR!Cannot read properties of null(reading ‘pickAlgorithm’)報錯問題解決

當在使用npm包管理器或執行npm命令時&#xff0c;有時候會遇到“npm ERR!Cannot read properties of null(reading ‘pickAlgorithm’)”這個錯誤提示&#xff0c;這是一個常見的npm錯誤。 這個錯誤提示通常說明在使用npm包管理器時&#xff0c;執行了某個npm命令&#xff0c;…

學習筆記整理-正則表達式-01-認識正則

一、基本認識 1. 什么是正則表達式 正則表達式(regular expression)描述了字符串"構成模式"&#xff0c;經常被用于檢查字符串是否符合預定的格式要求。 用一個例子快速演示正則表達式基本使用方法&#xff1a;檢查某個字符串是否是6位數字 // 要檢查的字符串va…

第五課:聯合體或共用體 Union

功能描述&#xff1a;聯合體或共用體 Union 的介紹及使用方法 一、Union 簡介 共同體&#xff08;union&#xff09;也稱為聯合體&#xff0c;它能在同一個內存空間中存儲不同的數據類型&#xff08;不是同時存儲&#xff09;&#xff0c;其典型的用法是&#xff0c;設計一種表…

Vue3 —— watchEffect 高級偵聽器

該文章是在學習 小滿vue3 課程的隨堂記錄示例均采用 <script setup>&#xff0c;且包含 typescript 的基礎用法 前言 Vue3 中新增了一種特殊的監聽器 watchEffect&#xff0c;它的類型是&#xff1a; function watchEffect(effect: (onCleanup: OnCleanup) > void,o…

整理mongodb文檔:find方法查詢數據

個人博客 整理mongodb文檔:find方法查詢數據 求關注&#xff0c;求批評&#xff0c;求指出&#xff0c;如果哪兒不清晰&#xff0c;請指出來&#xff0c;謝謝 文章概敘 如題&#xff0c;本文講的是如何用find查詢數據&#xff0c;如何在數組、字段、對象中查詢&#xff0c;以…

自然語言處理技術:NLP句法解析樹與可視化方法

自然語言處理(Natural Language Processing,NLP)句法解析樹是一種表示自然語言句子結構的圖形化方式。它幫助將句子中的每個詞匯和短語按照語法規則連接起來,形成一個樹狀結構,以便更好地理解句子的語法結構和含義。句法解析樹對于理解句子的句法關系、依存關系以及語義角…

Python實現輕量級WEB服務器接收HTTP提交的RFID刷卡信息并回應驅動讀卡器顯示播報語音

本示例使用的設備&#xff1a;RFID網絡WIFI無線TCP/UDP/HTTP可編程二次開發讀卡器POE供電語音-淘寶網 (taobao.com) # -*- coding: utf-8 -*- import time import datetime import socket import threading#將中文信息轉換編碼&#xff0c;顯示文字、TTS語音都需要轉換-------…

從入門到精通Python隧道代理的使用與優化

哈嘍&#xff0c;Python爬蟲小伙伴們&#xff01;今天我們來聊聊如何從入門到精通地使用和優化Python隧道代理&#xff0c;讓我們的爬蟲程序更加穩定、高效&#xff01;今天我們將對使用和優化進行一個簡單的梳理&#xff0c;并且會提供相應的代碼示例。 1. 什么是隧道代理&…

SpringCloud Gateway:status: 503 error: Service Unavailable

使用SpringCloud Gateway路由請求時&#xff0c;出現如下錯誤 yml配置如下&#xff1a; 可能的一種原因是&#xff1a;yml配置了gateway.discovery.locator.enabledtrue&#xff0c;此時gateway會使用負載均衡模式路由請求&#xff0c;但是SpringCloud Alibaba刪除了Ribbon的…

無涯教程-Perl - setpwent函數

描述 此功能將枚舉設置(或重置)到密碼條目集的開頭。應該在第一次調用getpwent之前調用此函數。 語法 以下是此函數的簡單語法- setpwent返回值 此函數不返回任何值。 例 以下是顯示其基本用法的示例代碼- #!/usr/bin/perlwhile(($name, $passwd, $uid, $gid, $quota, …

C++寫文件,直接寫入結構體

C寫文件&#xff0c;直接寫入結構體 以前寫文件都是寫入字符串或者二進制再或者就是一些配置文件&#xff0c;今天介紹一下直接寫入結構體&#xff0c;可以在軟件參數較多的時候直接進行讀寫&#xff0c;直接將整個結構體寫入和讀取&#xff0c;看代碼&#xff1a; #include&…

tomcat中的BIO與NIO發展

tomcat中的NIO發展 前言 Tomcat目前支持BIO&#xff08;阻塞 I/O&#xff09;、NIO&#xff08;非阻塞 I/O&#xff09;、AIO&#xff08;異步非阻塞式IO&#xff0c;NIO的升級版&#xff09;、APR&#xff08;Apache可移植運行庫&#xff09;模型&#xff0c;本文主要介紹NI…

iceberg系列之 hadoop catalog 小文件合并實戰

背景 flink1.15 hadoop3.0pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mave…

UBuntu18.04 Qt之雙HDMI屏切換

UBuntu18.04 Qt之雙HDMI接2個4K屏并分別設置分辨率、主屏、副屏 一、設置HDMI-2為主屏 在main函數里面添加&#xff1a; #include "mainwindow.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);{long nTotal 0;c…

spring cloud gateway中配置uri

gateway中配置uri配置有三種方式: websocket方式&#xff1a;uri: ws://localhost:9000http方式: uri: http://localhost:8130/lb注冊中心配置方式&#xff08;注冊的服務名稱&#xff09;: uri: lb://monitor-ms gateway的lb方式識別的服務名稱命名規則&#xff1a; "[…

設計模式——適配器模式

引入實例 說起適配器其實在我們的生活中是非常常見的&#xff0c;比如&#xff1a;學校的宿舍的電壓都比較低&#xff0c;而有的學生想使用大功率電器&#xff0c;宿舍的就會跳閘&#xff0c;然而如果你使用一個適配器&#xff08;變壓器&#xff09;就可以使用了&#xff08;…

Jtti:windows虛擬內存最小值太低如何解決

當Windows虛擬內存的最小值設置過低時&#xff0c;可能會導致系統性能下降、應用程序崩潰甚至系統不穩定。解決方法包括&#xff1a; 調整虛擬內存設置&#xff1a; 可以通過以下步驟調整虛擬內存的設置&#xff1a; 右鍵點擊“此電腦”或“計算機”&#xff0c;選擇“屬性”。…

被迫學習一波Linux命令

事情起因 部署一個服務&#xff0c;人家說了最低配置是3G&#xff0c;我沒當回事&#xff0c;拿著個2G的服務器直接就上了&#xff0c;結果&#xff0c;哈哈&#xff0c;都能猜到結果&#xff1a;服務器內存爆了&#xff01;&#xff01;&#xff01;而且最可氣的是服務器還登…

ansible案列之LNMP分布式劇本

LNMP分布式劇本 一&#xff1a;環境設置二&#xff1a;編寫Nginx劇本準備nginx下載源準備配置文件并開放PHP的訪問路徑準備php測試頁面編寫nginx劇本 三&#xff1a;編寫Mysql劇本編寫密碼獲取腳本準備Mysql的yum源編寫mysql劇本 四&#xff1a;準備PHP劇本準備兩個配置文件編寫…