Spring--IOC容器的一些擴展屬性

一、BeanFactoryPostProcessor和BeanPostProcessor

BeanFactoryPostProcessor的作用是在實例化前修改BeanDefinition的屬性

BeanPostProcessor的作用是在bean完成創建實例、填充屬性之后,初始化階段的前后都會對bean進行操作,使用postProcessBeforeInitialization和postProcessAfterInitialization。

BeanFactoryPostProcessor控制BeanDefinition流程:

  1. 自定義類實現BeanFactoryPostProcessor接口,實現postProcessBeanFactory方法
  2. 執行postProcessBeanFactory方法修改BeanDefinition

BeanPostProcessor知道初始化前后操作方法:

  1. 自定義類實現BeanPostProcessor,實現postProcessBeforeInitialization和postProcessAfterInitialization方法
  2. 將自定義BeanPostProcessor添加到beanFactory中(手動添加)
  3. 在初始化方法中,會先后(相對于初始化)遍歷beanFactory的BeanPostProcessor,并調用before/after方法。

BeanFactoryPostProcessor邏輯
加載并讀取文件 ----> 注冊BeanDefinition ----> 自定義BeanFactoryPostProcessor并執行postProcessBeanFactory

BeanPostProcessor邏輯:
加載BeanDefinition ----> 自定義BeanPostProcessor并加入到beanFactory中 ----> 初始化方法中Spring掃描BeanPostProcessor集合,調用before/after方法

二、初始化和銷毀

Bean的創建流程:

  1. 創建實例
  2. 填充屬性
  3. 初始化
  4. 注冊銷毀方法(注冊銷毀方法的適配器,包含銷毀方法,bean名稱等)

初始化:
先判斷Bean是否實現InitializingBean,如果實現則執行初始化方法。然后再遍歷BeanDefinition中的初始化方法并通過反射執行。

銷毀方法:
先判斷Bean是否實現DisposableBean,再從存放銷毀方法的集合中獲取bean的銷毀適配器,執行銷毀方法。

三、Aware接口

Aware接口的作用是:

允許實現了接口的實例bean可以獲取bean所在的beanfactory/applicationcontext等,進而使用其他服務(bean中需要增加beanfactory/applicationcontext屬性)

BeanFactoryAware,在初始化前操作前,實例化后,判斷bean是否實現接口,如果實現,則注入bean的beanfactory屬性

BeanApplicationContextAware,在初始化前操作中注入屬性。

四、Bean的作用域

Bean的作用域:

  1. 創建實例

  2. 填充屬性

    (設置aware)

  3. 初始化前 初始化 初始化后

  4. 注冊銷毀方法

  5. 將bean注冊到容器中

Bean的作用域:

  1. 單例singleton:如果是單例,則有4、5
  2. 如果是prototype(每次使用則則銷毀):則沒有4、5

也就是說:原型bean沒有銷毀方法,不會存入容器

五、FactoryBean

在獲取bean的時候,如果該bean實現了FactoryBean接口,則調用getObject方法(可以將復雜的類轉為自定義管理在容器中)

(sington直接獲取并存入FactoryBean緩存中,下次從緩存中獲取,prototype每次都調用getObject方法獲取bean)

六、容器事件和事件監聽

事件監聽和容器事件:

  1. 在AbstractApplicationContext中先將事件監聽器添加到事件發布者multicaster中

  2. 然后發布refresh容器刷新事件,(事件發布者發布事件,發布之后,遍歷事件發布者中的監聽器泛型是否是發布事件的類型,如果是就調用監聽器中的方法)在這里插入圖片描述

  3. 最后在AbstractApplicationContext中的doclose方法中發布關閉事件

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

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

相關文章

8w字:推薦系統技術體系深度解析:從理論基礎到工業實踐的完整指南

插話:剛接觸推薦系統還是大一下作比賽,然后找資料,順便在巧合下在“識典百科”(現在叫快懂百科,抖音的,改好幾回名了,還要一條條插入引用資料,現在看來,好像抖音也不在乎…

RA4M2開發IOT(8)----IIC驅動OLED

RA4M2開發IOT.8--IIC驅動OLED 概述視頻教學樣品申請硬件準備參考程序修改IIC驅動OLED屬性配置移植SSD1306字符取模ASCII顯示圖片取模顯示圖片 概述 本章旨在通過 IC 接口驅動 OLED 顯示屏(常見型號如 SSD1306),實現圖形和文本的顯示功能。OL…

數組題解——?輪轉數組【LeetCode】

189. 輪轉數組 通過三次反轉操作,可以實現數組的輪轉: 反轉整個數組: 將數組完全反轉,使得原數組的后 k 個元素移動到數組的前面。反轉前 k 個元素: 將前 k 個元素反轉,恢復它們的原始順序。反轉后 n - k 個元素: 將后 n - k 個元…

AR 眼鏡之-條形碼識別-實現方案

目錄 📂 前言 AR 眼鏡系統版本 條形碼識別 1. 🔱 技術方案 1.1 技術方案概述 1.2 實現方案 1)相機App顯示模塊 2)算法so庫JNI模塊 3)算法條形碼識別模塊 2. 💠 實現相機App顯示模塊 2.1 創建 Ba…

華為云 Flexus+DeepSeek 征文|基于 CCE 集群部署 Dify 平臺工作流:科研論文翻譯與 SEO 優化工具的全流程設計實踐

華為云 FlexusDeepSeek 征文|基于 CCE 集群部署 Dify 平臺工作流:科研論文翻譯與 SEO 優化工具的全流程設計實踐 背景 作為被科研論文折磨已久的大學生,希望研究成果能被更多人看到,尤其是在學術全球化的趨勢下,論文翻…

C++對象繼承詳解:從入門到精通

繼承是面向對象編程的三大特性之一,也是C中實現代碼復用和多態的重要機制。本文將帶你深入理解C繼承的核心概念與應用。 一、繼承的基本概念 1.1 什么是繼承? 繼承允許我們基于已有的類創建新類,新類(派生類)可以繼…

Jenkins安裝與配置全攻略:從入門到高級功能實戰

在DevOps實踐中,Jenkins作為最流行的持續集成工具之一,扮演著至關重要的角色。本文將全面介紹Jenkins的安裝、配置及高級功能使用,幫助開發、運維和測試團隊快速搭建高效的CI/CD流水線。 一、Jenkins安裝 1.1 環境準備 Jenkins官網:https://jenkins.io 注意:Jenkins 2…

[OS_26] 計算機系統安全 | CIA原則 | 側信道攻擊

系統調用是唯一訪問操作系統對象的途徑 拒絕越權訪問 →→ Confidentiality拒絕越權修改 →→ Integrity(再加上公平資源調度 →→ Availability) 在操作系統 API 上,我們可以構建命令行工具、編譯器、數據庫、瀏覽器等豐富的應用。 當越來越多用戶開始共享計算機、…

Chromium 136 編譯指南 macOS篇:編譯優化技巧(六)

1. 引言 在現代軟件開發的高效化進程中,編譯優化已經從簡單的性能調優發展為一門綜合性的工程科學。對于Chromium 136這樣一個包含超過2500萬行代碼的超大規模項目而言,編譯時間往往成為制約開發效率的關鍵瓶頸。在典型的開發場景中,一次完整…

Spark教程6:Spark 底層執行原理詳解

文章目錄 一、整體架構概述二、核心組件詳解1. SparkContext2. DAG Scheduler3. Task Scheduler4. Executor 三、作業執行流程1. DAG 生成與 Stage 劃分2. Task 調度與執行3. 內存管理 四、Shuffle 機制詳解1. Shuffle 過程2. Shuffle 優化 五、內存管理機制1. 統一內存管理&am…

xlsx-style 插件批量導出多個sheet表格excel中遇到的問題及解決

Vue2中 前端界面導出表格,使用XLSXS插件版本(^0.8.13)導出表格存在表格背景顏色無法正常展示,百分比數據沒有正常展示 【有條件的盡量先升級高版本插件,此插件版本對樣式支持度不夠】 優先考慮插件版本升級 同樣的使用方法在vue3中沒有出現錯…

Java后端與Vue前端項目部署全流程:從環境配置到Nginx反向代理

文章目錄 1. 準備項目所需的環境2. 后端項目打包步驟 1:使用 Maven 打包步驟 2:定位生成的 JAR 包步驟 3:上傳 JAR 包到 Linux 系統步驟 4:驗證 Java 環境步驟 5:啟動 JAR 包 3. 前端項目打包步驟 1:執行 B…

Mybatis踩坑之一天

background: 對接AML系統,日間實時需要送交易對手要素過去(目前主要是交易對手全名),夜間需要將歷史交易送AML進行回溯,交互方式是文件。文件要素為日期、對手類型、對手名、交易流水之類。 設置對送AML的文件設計表…

【PyTorch】分布式訓練報錯記錄-ERROR:torch.distributed.elastic.multiprocessing.api:failed (exitcode: 1)

最近,我在服務器上起基于PyTorch分布式框架的預訓練實驗,起初實驗都在順利進行,但是當我們把模型的深度與寬度調大之后,模型在訓練幾代之后便會出現如下的報錯: WARNING:torch.distributed.elastic.multiprocessing.a…

有哪些詞編碼模型

有哪些詞編碼模型 詞編碼模型:是將自然語言符號映射為稠密的高維向量,使語義相近的詞匯在向量空間中位置接近。 不過,也有部分模型會考慮字母或字符信息,如基于字節對編碼(BPE)的模型會將單詞拆分成子詞,這里的子詞可能是字母組合。 詞編碼模型的原理主要是通過機器學…

Mono 功能介紹與使用示例

Mono 功能介紹與使用示例 一、核心概念與特性 Mono 是 Spring Reactor 框架中的核心組件,屬于響應式編程(Reactive Programming)模型,專注于處理包含 0 或 1 個元素 的異步序列[1][2][5]。其核心特點包括: 異步非阻…

5060Ti雙顯卡+LLaMA-factory大模型微調環境搭建

查看環境確定安裝版本安裝CUDA12.8安裝Anaconda安裝Visual Studio C桌面開發環境(編譯llama.cpp需要)安裝cmake(編譯llama.cpp需要)安裝llama.cpp(用于量化)安裝huggingface-cli安裝llama-factory安裝PyTorch2.7.0安裝bitsandbytes安裝flash-attention加…

Lnmp和XunRuiCMS一鍵部署(Rocky linux)

先上傳XunRuiCMS-Study.zip包到當前目錄,可以去官網下載 #!/bin/bash # function: install nginx mysql php on Rocky Linux 9.5 with fixed PHP-FPM configip$(hostname -I | awk {print $1}) yhxunrui passwordxunrui123# 檢查是否為root用戶 if [ "$USER&qu…

高精度OFDR設備在CPO交換機中的應用

光電共封裝(CPO)交換機的特點 核心需求:CPO將光模塊與交換芯片集成封裝,縮短電互連距離,降低功耗和延遲,但需解決以下挑戰: 1.光器件微型化:硅光芯片、光纖陣列等需高精度制造。 …

Vulkan 通過 CMake 集成 Dear ImGUI

一、 目錄與文件部署 從官網獲取 IMGUI 代碼庫,在項目 extern 目錄下新建 imgui 目錄,將相關文件復制進去,構建出如下目錄結構: . ├── build ├── extern │ ├── glfw │ ├── glm │ └── imgui │ ├…