Spring源碼解析

第一講 容器接口

BeanFactory和ApplicationContext接口的具體繼承關系:

ApplicationContext 間接繼承了BeanFactory

  • BeanFactory是父接口
  • ApplicationContext是子接口,里面一些功能調用了BeanFactory
BeanFactory的功能
  • 表面上只有 getBean(接口的方法)
  • 實際上控制反轉、基本的依賴注入、直至bean的生命周期的各種功能,都由它的實現類來提供

他的實現類-DefaultListableBeanFactory

  • 父類:DefaultSingleletonBeanRegistry

BeanFactory的主要方法(看接口的主要方法ctrl+F12):

  • containsBean 根據bean的名字看容器中是否包含該對象
  • getAliases 根據bean的名字獲取他的別名
  • getBean 根據name/type 獲取該bean

管理所有單例對象

所有單例bean:singletonObjects

獲取到所有單例bean

DefaultSingleletonBeanRegistry.class.get
ApplicationContext的擴展功能

ApplicationContext的擴展功能 ,主要來自 繼承的四個接口

  • MessageSource 處理國際化資源能力
  • ResourcePayyernResolver 對通配符去匹配資源的能力
  • EnvironmentCapable 讀取環境信息,比如讀取 application.properties
  • ApplicationEventPublisher 發布事件對象
MessageSource 處理國際化資源能力
context.getMessage("hi",null, Locale.ENGLISH);
ResourcePayyernResolver 對通配符去匹配資源的能力
 //第二個接口 通配符classpath  jar包中classpath*:
context.getResource("classpath:hello.txt");
  • file: 磁盤路徑
  • classpath: 相對路徑
  • classpath*:也可以在jar包尋找
EnvironmentCapable 讀取環境信息,比如讀取 application.properties
//第三個信息 獲取配置信息
//1、獲取系統環境變量中的值
context.getEnvironment().getProperty("java_home");
//2、獲取application.porperties
context.getEnvironment().getProperty("server.port");

ApplicationEventPublisher 發布事件對象
  //4、發送事件
context.publishEvent(new User());

接收事件

    @EventListenerpublic void res(User user){log.(user)}

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

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

相關文章

Django Rest Framework 創建純凈版Django項目部署DRF

描述創建純凈版的Django項目和 Django Rest Framework 環境的部署 一、創建Django項目 1. 環境說明 操作系統 Windows11python版本 3.9.13Django版本 V4.2.202. 操作步驟(在Pycharm中操作) 創建Python項目drfStudy、虛擬環境 ?虛擬環境中安裝 jdangopip install django==4.…

圖解AUTOSAR_CP_NetworkManagementInterface

AUTOSAR 網絡管理接口(Nm)詳解 AUTOSAR 網絡管理接口規范與實現指南 目錄 1. 概述 1.1. 網絡管理接口的作用1.2. 網絡管理接口的特點 2. 網絡管理接口架構 2.1. 架構概覽2.2. 模塊交互關系 3. 網絡管理狀態機 3.1. 狀態定義3.2. 狀態轉換 4. 協調算法 4.1. 協調關閉流程4.2. 同…

java學習總結(八):Spring boot

一、SpringBoot簡介 傳統Spring開發缺點: 1、導入依賴繁瑣 2、項目配置繁瑣 Spring Boot是全新框架(更像是一個工具, 腳手架),是Spring提供的一個子項目, 用于快速構建Spring應用程序。 隨著Spring 3.0的發布,Spring 團…

vue-router實現

實現一個簡化版的 vue-router 可以幫助我們更好地理解 Vue 路由是如何工作的。Vue Router 主要的功能是基于瀏覽器的 URL 來管理組件的顯示,能夠根據 URL 變化切換不同的視圖。下面是一個簡化版的實現,用于幫助你理解基本的路由機制。 創建一個簡單的 V…

Redis 服務器:核心功能與優化實踐

Redis 服務器:核心功能與優化實踐 引言 Redis(Remote Dictionary Server)是一款高性能的鍵值對存儲系統,廣泛用于緩存、消息隊列、實時排行榜等場景。本文將深入探討Redis服務器的核心功能,并提供一些優化實踐的技巧,以幫助讀者更好地理解和運用Redis。 Redis的核心功…

openEuler24.03 LTS下安裝MySQL8

前提條件 擁有openEuler24.03 LTS環境,可參考:Vmware下安裝openEuler24.03 LTS 步驟 卸載原有mysql及mariadb sudo systemctl stop mysql mysqld 2>/dev/null sudo rpm -qa | grep -i mysql\|mariadb | xargs -n1 sudo rpm -e --nodeps 2>/dev/…

GLOW-TTS

我首先需要理解用戶的指令,用戶希望我翻譯文章的3.1節“Training and Inference Procedures”部分。為了完成這個任務,我需要仔細閱讀文章的3.1節,理解其中的技術細節和概念,然后將這些內容準確地翻譯成中文。 在閱讀3.1節時&…

【算法思想】高精度

引入 首先了解&#xff1a; 1. int 范圍為10^9 2. long long 范圍數量級為10^18 如果超過該數量級&#xff0c;該怎么辦&#xff1f; ——這就是高精度、大數的算法問題 加法 輸入兩個整數a,b,輸出他們的和&#xff08;<10的500次方&#xff09; 核心是加法的核心——》每…

【失敗了】LazyGraphRAG利用本地ollama提供Embedding model服務和火山引擎的deepseek API構建本地知識庫

LazyGraphRAG測試結果如下 數據&#xff1a; curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt -o ./ragtest/input/book.txt 失敗了 氣死我也&#xff01;&#xff01;&#xff01;對deepseek-V3也不是很友好啊&#xff0c;我沒錢prompt 微調啊&#xff0c;暈死…

ccfcsp3402矩陣重塑(其二)

//矩陣重塑&#xff08;其二&#xff09; #include<iostream> using namespace std; int main(){int n,m,t;cin>>n>>m>>t;int c[10000][10000];int s0,sum0;int d[10000],k[100000];for(int i0;i<n;i){for(int j0;j<m;j){cin>>c[i][j];d[s…

算法-除自身以外數組的乘積

力扣題目&#xff1a;238. 除自身以外數組的乘積 - 力扣&#xff08;LeetCode&#xff09; 題目描述&#xff1a; 給你一個整數數組 nums&#xff0c;返回 數組 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。 題目數據 保證 數組 nums…

Unity Shader - UI Sprite Shader之簡單摳圖效果

Sprite摳圖效果&#xff1a; 前言 在PhotoShop中我們經常會用到摳圖操作&#xff0c;現在就用Shader實現一個簡單的摳圖效果。 實現原理&#xff1a; 使用當前像素顏色與需要摳掉的顏色相減作比較&#xff0c;然后與一個指定的閾值比較以決定是否將其顯示出來&#xff1b; U…

【Mac】安裝 Parallels Desktop、Windows、Rocky Linux

一、安裝PD 理論上&#xff0c;PD只支持試用15天&#xff01;當然&#xff0c;你懂的。 第一步&#xff0c;在 Parallels Desktop for Mac 官網 下載 Install Parallels Desktop.dmg第二步&#xff0c;雙擊 Install Parallels Desktop.dmg 第三步&#xff0c;雙擊安裝Paralle…

學習單片機需要多長時間才能進行簡單的項目開發?

之前有老鐵問我&#xff0c;學單片機到底要多久&#xff0c;才能進行簡單的項目開發&#xff1f;是三個月速成&#xff0c;還是三年磨一劍&#xff1f; 今天咱們就來聊聊這個話題&#xff0c;我不是什么高高在上的專家&#xff0c;就是個踩過無數坑、燒過幾塊板子的“技術老友”…

pyqt 上傳文件或者文件夾打包壓縮文件并添加密碼并將密碼和目標文件信息保存在json文件

一、完整代碼實現 import sys import os import json import pyzipper from datetime import datetime from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout,QPushButton, QLineEdit, QLabel, QFileDialog,QMessageBox, QProgressBar) from PyQt5.…

centos操作系統上傳和下載百度網盤內容

探序基因 整理 進入百度網盤官網百度網盤 客戶端下載 下載linux的rpm格式的安裝包 在linux命令行中輸入&#xff1a;rpm -ivh baidunetdisk_4.17.7_x86_64.rpm 出現報錯&#xff1a; 錯誤&#xff1a;依賴檢測失敗&#xff1a; libXScrnSaver 被 baidunetdisk-4.17.7-1.x8…

LeetCode134?加油站

關聯LeetCode題號134 本題特點 貪心局部最優解-部分差值 如果小于0&#xff08;消耗大于油站油量&#xff09; 就從下一個加油站開始&#xff0c;因為如果中間有小于0的情況 當前站就不可能是始發站&#xff0c;整體最優解-整體差值 如果小于0 &#xff0c;那么就是不能有始發…

基于 Verilog 的時序設計:從理論到實踐的深度探索

在數字電路設計領域,時序設計是一個至關重要的環節,它涉及到組合邏輯電路與時序邏輯電路的設計差異、時鐘信號的運用以及觸發器的工作原理等多個方面。本文將圍繞基于 Verilog 的時序設計實驗展開,詳細闡述實驗過程、代碼實現以及結果分析,幫助讀者深入理解時序設計的核心概…

藍牙系統的核心組成解析

一、硬件層&#xff1a;看得見的物理載體 1. 射頻模塊&#xff08;Radio Frequency Module&#xff09; 專業描述&#xff1a;工作在2.4GHz ISM頻段&#xff0c;支持GFSK/π/4 DQPSK/8DPSK調制方式 功能類比&#xff1a;相當于人的"嘴巴"和"耳朵" 發射端…

獵豹移動(Cheetah Mobile)

本文來自騰訊元寶 公司背景與發展歷程 ?成立與早期定位 獵豹移動成立于2010年11月&#xff0c;由金山安全與可牛影像合并而成&#xff0c;初期以移動安全工具和清理軟件為核心業務。其明星產品包括《獵豹清理大師》&#xff08;Clean Master&#xff09;和《獵豹瀏覽器》&…