+++++背到厭倦。持續更新

Spring IoC 的工作流程:

  1. 讀取 BeanDefinition:?Spring 容器啟動時,會讀取 Bean 的配置信息 (例如 XML 配置文件、注解或 Java 代碼),并將這些配置信息轉換為?BeanDefinition?對象。
  2. 創建 Bean 實例:?根據?BeanDefinition?中的信息,Spring 容器使用反射機制創建 Bean 的實例。
  3. 解析依賴關系:?Spring 容器解析 Bean 的依賴關系,找到 Bean 所依賴的其他 Bean。
  4. 注入依賴:?Spring 容器使用依賴注入的方式,將依賴對象注入到 Bean 中。
  5. Bean 的生命周期管理:?Spring 容器負責管理 Bean 的生命周期,包括初始化、使用和銷毀。

自動裝配的核心概念:

  • @EnableAutoConfiguration:

    • 這是一個復合注解,通常放在 Spring Boot 應用的啟動類上。
    • 它啟用了 Spring Boot 的自動配置機制。
    • 它實際上包含了?@AutoConfigurationPackage?和?@Import(AutoConfigurationImportSelector.class)?兩個注解。
  • @AutoConfigurationPackage:

    • 它用于指定自動配置的基礎包。
    • Spring Boot 會掃描該包及其子包下的所有組件 (例如?@Component,?@Service,?@Repository,?@Controller?等),并將它們注冊為 Bean。
    • 通常情況下,@AutoConfigurationPackage?會自動掃描啟動類所在的包作為基礎包。
  • AutoConfigurationImportSelector:

    • 它是自動配置的核心組件。
    • 它負責掃描所有符合自動配置條件的類,并將它們導入到 Spring 容器中。
    • 它主要通過以下幾個步驟來實現自動配置:
      1. 掃描?META-INF/spring.factories?文件:?AutoConfigurationImportSelector?會掃描所有 jar 包中的?META-INF/spring.factories?文件。
      2. 加載自動配置類:?spring.factories?文件中定義了大量的自動配置類,AutoConfigurationImportSelector?會加載這些類。
      3. 條件過濾:?AutoConfigurationImportSelector?會根據一定的條件對自動配置類進行過濾,只有滿足條件的自動配置類才會被導入到 Spring 容器中。
      4. 導入自動配置類:?AutoConfigurationImportSelector?使用?@Import?注解將符合條件的自動配置類導入到 Spring 容器中。
  • 條件注解 (Conditional Annotations):

    • Spring Boot 提供了大量的條件注解,用于控制自動配置類的生效條件。

?MyBatis中一級緩存和二級緩存有什么差別?

1. 一級緩存 (Local Cache):

  • 作用域:?SqlSession 級別。
  • 生命周期:?與 SqlSession 的生命周期相同。 當 SqlSession 關閉時,一級緩存也會被清空。
  • 存儲介質:?內存。
  • 工作原理:
    • 當執行一個查詢語句時,MyBatis 首先會從一級緩存中查找是否存在相同的 SQL 語句和參數。
    • 如果存在,則直接從一級緩存中返回結果,避免訪問數據庫。
    • 如果不存在,則訪問數據庫,并將查詢結果放入一級緩存中。
    • 當執行更新、插入或刪除語句時,MyBatis 會清空一級緩存,以保證數據的一致性。
  • 優點:
    • 提高查詢性能,減少數據庫訪問次數。
    • 實現簡單,無需額外配置。
  • 缺點:
    • 緩存范圍小,只能在單個 SqlSession 中共享。
    • 并發性差,多個 SqlSession 之間無法共享緩存。
  • 默認開啟:?一級緩存默認開啟,無需手動配置。
  • 清空時機:
    • 執行更新、插入或刪除語句時。
    • 手動調用?SqlSession.clearCache()?方法時。
    • SqlSession 關閉時。

2. 二級緩存 (Second Level Cache):

  • 作用域:?Mapper 級別 (namespace 級別)。
  • 生命周期:?與應用程序的生命周期相同。
  • 存儲介質:?可以配置為內存、磁盤或其他存儲介質。
  • 工作原理:
    • 當執行一個查詢語句時,MyBatis 首先會從二級緩存中查找是否存在相同的 SQL 語句和參數。
    • 如果存在,則直接從二級緩存中返回結果,避免訪問數據庫。
    • 如果不存在,則訪問數據庫,并將查詢結果放入二級緩存中。
    • 當執行更新、插入或刪除語句時,MyBatis 會清空二級緩存中與該語句相關的緩存區域,以保證數據的一致性。
  • 優點:
    • 提高查詢性能,減少數據庫訪問次數。
    • 緩存范圍大,可以在多個 SqlSession 之間共享。
    • 并發性好,多個 SqlSession 可以同時訪問二級緩存。
  • 缺點:
    • 實現復雜,需要手動配置。
    • 數據一致性難以保證,需要謹慎使用。
  • 默認關閉:?二級緩存默認關閉,需要手動配置才能開啟。
  • 清空時機:
    • 執行更新、插入或刪除語句時,會清空與該語句相關的緩存區域。
    • 手動配置緩存刷新策略。
    • 應用程序關閉時。

?

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

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

相關文章

如何在Git歷史中抹掉中文信息并翻譯成英文

如何在Git歷史中抹掉中文信息并翻譯成英文 在軟件開發和版本控制領域,維護一個清晰、一致的代碼歷史記錄是至關重要的。然而,有時我們可能會遇到需要修改歷史提交的情況,比如刪除敏感信息或修正錯誤。本文將詳細探討如何在Git歷史中抹掉中文…

21 天 Python 計劃:MySQL中DML與權限管理

文章目錄 前言一、介紹二、MySQL數據操作:DML2.1 插入數據(INSERT)2.1.1 插入完整數據(順序插入)2.1.2 指定字段插入數據2.1.3 插入多條記錄2.1.4 插入查詢結果 2.2 更新數據(UPDATE)2.3 刪除數…

微信小程序 -- 原生封裝table

文章目錄 table.wxmltable.wxss注意 table.js注意 結果數據結構 最近菜鳥做微信小程序的一個查詢功能,需要展示excel里面的數據,但是菜鳥找了一圈,也沒發現什么組件庫有table,畢竟手機端好像確實不太適合做table! 菜鳥…

LangChain-輸出解析器 (Output Parsers)

輸出解析器是LangChain的重要組件,用于將語言模型的原始文本輸出轉換為結構化數據。本文檔詳細介紹了輸出解析器的類型、功能和最佳實踐。 概述 語言模型通常輸出自然語言文本,但在應用開發中,我們經常需要將這些文本轉換為結構化的數據格式…

【安全】加密算法原理與實戰

為了理解SSL/TLS原理,大家需要掌握一些加密算法的基礎知識。當然,這不是為了讓大家成為密碼學專家,所以只需對基礎的加密算法有一些了解即可。基礎的加密算法主要有哈希(Hash,或稱為散列)?、對稱加密(Symm…

MySQL 優化教程:讓你的數據庫飛起來

文章目錄 前言一、數據庫設計優化1. 合理設計表結構2. 范式化與反范式化3. 合理使用索引 二、查詢優化1. 避免使用 SELECT *2. 優化 WHERE 子句3. 優化 JOIN 操作 三、服務器配置優化1. 調整內存分配2. 調整并發參數3. 優化磁盤 I/O 四、監控與分析1. 使用 EXPLAIN 分析查詢語句…

LangChain4j(1):初步認識Java 集成 LLM 的技術架構

LangChain 作為構建具備 LLM 能力應用的框架,雖在 Python 領域大放異彩,但 Java 開發者卻只能望洋興嘆。LangChain4j 正是為解決這一困境而誕生,它旨在借助 LLM 的強大效能,增強 Java 應用,簡化 LLM 功能在Java應用中的…

Linux服務器安裝百度飛槳3.0(pip docker)

Linux安裝部署百度飛槳3.0 1.官方文檔指引2.確認服務器型號2.1 確認Python版本2.2 確認pip是否安裝2.3 確認計算平臺 3.本機安裝(基于通過 pip 安裝)3.1 下載安裝 PaddlePaddle3.2 安裝PaddleX3.2.1 安裝PaddleX3.2.2 命令行規范3.2.3 運行示例3.2.4 查看…

Spring Boot 自動加載流程詳解

前言 Spring Boot 是一個基于約定優于配置理念的框架,它通過自動加載機制大大簡化了開發者的配置工作。本文將深入探討 Spring Boot 的自動加載流程,并結合源碼和 Mermaid 圖表進行詳細解析。 一、Spring Boot 自動加載的核心機制 Spring Boot 的自動加…

2025年危化品安全管理人員備考指南|智能題庫+核心考點解析

作為危化品生產單位安全管理人員(主要負責人),考試內容主要涵蓋三大模塊: 法律法規體系 《安全生產法》修訂要點(2023版) 危險化學品重大危險源辨識標準(GB 18218) 最新《化工過…

如何優雅使用 ReentrantLock 進行加解鎖:避免常見坑點,提高代碼可維護性

引言:鎖的基本概念和問題 在多線程編程中,為了確保多個線程在訪問共享資源時不會發生沖突,我們通常需要使用 鎖 來同步對資源的訪問。Java 提供了不同的鎖機制,其中 ReentrantLock 是一種最常用且功能強大的鎖,它屬于…

Redhat紅帽 RHCE8.0認證體系課程

課程大小:7.7G 課程下載:https://download.csdn.net/download/m0_66047725/90546064 更多資源下載:關注我 紅帽企業 Linux 系統的管理技能已經成為現代數據中心的核心競爭力。 Linux 在支持混合云、跨物理服務器、虛機、私有云和公共云計…

Shell腳本編程

目錄 1. Shell腳本概述 什么是Shell? Shell的作用 常見的Shell類型 2. 環境搭建與安裝 Linux系統 macOS系統 Windows系統 3.安裝并配置Zsh(macOS/Linux) 4. Shell基礎語法 變量與數據類型 輸入交互 5. Shell腳本進階 進程管理 …

學生管理系統(Python)

運行結果: 源代碼: """ 項目:類似于學生管理系統---增刪改查 """ #封裝一個學生類 import random class Student: def __init__(self,stuid,name,score): self.stuid stuid self.name name self.score …

電商素材革命:影刀RPA魔法指令3.0驅動批量去水印,實現秒級素材凈化

本文 去除水印實操視頻展示電商圖片水印處理的困境?影刀 RPA 魔法指令 3.0 強勢登場?利用魔法指令3.0兩步實現去除水印操作關于影刀RPA 去除水印實操視頻展示 我們這里選擇了4張小紅書里面比較帥氣的圖片,但凡用過小紅書的都知道,小紅書右下角是會有小…

Seq2Seq - GRU補充講解

nn.GRU 是 PyTorch 中實現門控循環單元(Gated Recurrent Unit, GRU)的模塊。GRU 是一種循環神經網絡(RNN)的變體,用于處理序列數據,能夠更好地捕捉長距離依賴關系。 ?重點掌握輸入輸出部分輸入張量&#…

設計模式-觀察者模式和發布訂閱模式區別

文章目錄 其他不錯的文章 二者有類似的地方,也有區別。 引用的文章說的已經比較清楚了,這里只列出對比圖。 對比點觀察者模式發布訂閱模式中間人角色無事件中心,觀察者直接訂閱目標有事件中心,發布者與訂閱者通過事件中心通信關系…

【SQL】基于多源SQL 去重方法對比 -- 精華版

【SQL】基于SQL 去重方法對比 -- 精華版 一、引言二、基于SQL去重方法完整對比1. MySQL去重方法及優劣勢1.1 ?DISTINCT關鍵字1.2 GROUP BY子句1.3 UNION系列操作1.4 子查詢 自關聯 2. Hive去重方法及優劣勢2.1 DISTINCT關鍵字2.2 ?GROUP BY子句2.3 ?ROW_NUMBER窗口函數2.4 …

電腦命名配置很高,為什么運行軟件特別卡

估計很多同學都碰見過這種情況,以我的Redmi G為例,I9-14待CPU,又換了一條內存條,現有配置I9-14900,40G內存5200MT/s,4060顯卡,為啥運行兩個辦公軟件就卡的不行,風扇狂轉,…

Spring Boot默認注冊的轉換器列表及其功能說明。這些轉換器使得控制器方法可以直接接收Integer、Long、Date等類型參數,無需手動實現轉換

以下是Spring Boot默認注冊的轉換器列表及其功能說明。這些轉換器使得控制器方法可以直接接收Integer、Long、Date等類型參數,無需手動實現轉換: 默認轉換器列表及功能 1. 基礎類型轉換器 轉換器名稱功能示例場景StringToIntegerConverter將字符串轉換…