Spring中的InitializingBean接口

使用方法

@Slf4j
@Component
public class MyBean implements InitializingBean {public MyBean() {log.info("===================> 構造方法");}@Overridepublic void afterPropertiesSet() throws Exception {log.info("===================> afterPropertiesSet方法");}
}

Spring中的Bean注入流程

在這里插入圖片描述


afterPropertieSet()和init-method

在Spring初始化bean的時候,如果該bean實現了InitializingBean接口,并且同時在配置了init-method,系統則是先調用afterPropertieSet()方法,然后再調用init-method中指定的方法。

通過查看Spring加載bean的源碼類AbstractAutowiredCapableBeanFactory可以看出:

protected void invokeInitMethods(String beanName, Object bean, @Nullable RootBeanDefinition mbd)throws Throwable {// 判斷bean是否實現InitializingBean接口boolean isInitializingBean = (bean instanceof InitializingBean);if (isInitializingBean && (mbd == null || !mbd.isExternallyManagedInitMethod("afterPropertiesSet"))) {if (logger.isTraceEnabled()) {logger.trace("Invoking afterPropertiesSet() on bean with name '" + beanName + "'");}if (System.getSecurityManager() != null) {try {AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> {((InitializingBean) bean).afterPropertiesSet();return null;}, getAccessControlContext());}catch (PrivilegedActionException pae) {throw pae.getException();}}else {// 執行InitializingBean接口實現的方法((InitializingBean) bean).afterPropertiesSet();}}if (mbd != null && bean.getClass() != NullBean.class) {String initMethodName = mbd.getInitMethodName();if (StringUtils.hasLength(initMethodName) &&!(isInitializingBean && "afterPropertiesSet".equals(initMethodName)) &&!mbd.isExternallyManagedInitMethod(initMethodName)) {// 使用反射的方式來調用init-method指定的方法invokeCustomInitMethod(beanName, bean, mbd);}}
}

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

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

相關文章

Python基礎之模塊和包講解

文章目錄 1 模塊和包1.1 模塊和包1.1.1 模塊1.1.2 包1.1.3 簡單使用 1.2 import 語句1.2.1 import1.2.2 from … import 語句1.2.3 from … import * 語句 1.4 深入模塊1.4.1 模塊符號表1.4.2 __name__屬性1.4.3 dir() 函數1.4.4 作用域 1.5 常用內置模塊1.5.1 collections1.5.…

生命在于學習——Python人工智能原理(2.4.2)

四、Python的程序結構與函數 4.4 函數 函數能將代碼劃分為若干模塊&#xff0c;每一個模塊可以相對獨立的實現某一個功能&#xff0c;函數有兩個主要功能&#xff0c;分別是降低編程難度和實現代碼復用&#xff0c;函數是一種功能抽象&#xff0c;復用它可以將一個復雜的大問…

使用函數open()的例子

代碼&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> int main(void) {int fd-1;char filename[]"test.txt";fdopen(filename,O_RDWR);if(-1fd){printf("Open file %s failure!,fd…

PyCharm左側項目區域出現淡黃色背景如何解決

PyCharm左側項目區域出現淡黃色背景如何解決 解決方法&#xff1a; 1、打開pycharm 文件 - > Setting-> 項目 -> 項目結構 2、添加內容根 為 你的項目根目錄即可恢復

Linux 相對路徑轉化為絕對路徑 C語言 (realpath函數)

功能簡述&#xff1a; 將路徑轉為絕對路徑。函數原型&#xff1a; char * realpath (const char *restrict name, char *restrict resolved) ○ name&#xff1a;原始路徑。 ○ resolved&#xff1a;存放規范化路徑的地址。可以為 null。 ○ 返回值&#xff1a;正常情況和resol…

什么是港股通?港股通碎股如何進行交易傭金最低萬0.8?

港股通是一種投資渠道&#xff0c;它允許符合條件的內地投資者通過內地的證券賬戶&#xff0c;間接地買賣在香港聯合交易所上市的股票。這一機制是滬港通和深港通計劃的一部分&#xff0c;旨在促進內地與香港資本市場的互聯互通。 ### 港股通的特點包括&#xff1a; - 交易范…

無痛接入FastText算法進行文本分類(附代碼)

AI應用開發相關目錄 本專欄包括AI應用開發相關內容分享&#xff0c;包括不限于AI算法部署實施細節、AI應用后端分析服務相關概念及開發技巧、AI應用后端應用服務相關概念及開發技巧、AI應用前端實現路徑及開發技巧 適用于具備一定算法及Python使用基礎的人群 AI應用開發流程概…

API-其他事件

學習目標&#xff1a; 掌握其他事件 學習內容&#xff1a; 頁面加載事件元素滾動事件頁面尺寸事件 頁面加載事件&#xff1a; 加載外部資源&#xff08;如圖片、外聯CSS和JavaScript等&#xff09;加載完畢時觸發的事件。 為什么要學&#xff1f;&#xff1f; 有些時候需要等…

OnlyOffice:為現代工作方式而生的辦公套件

ONLYOFFICE官網鏈接&#xff1a;https://www.onlyoffice.com/zh/office-suite.aspx https://www.onlyoffice.com/zh/pdf-editor.aspx OnlyOffice 是一款開源的辦公套件&#xff0c;它提供了一系列的辦公工具&#xff0c;包括文檔編輯器、表格編輯器和演示文稿編輯器。這些工具…

帶你了解現行數據庫的高級特性和新方法

數據庫的高級特性和新方法 數據庫的高級操作數據庫事務用戶權限控制數據的備份與還原Binlog運行日志數據庫的新特性窗口函數的使用 閱讀指南&#xff1a; 本文探討了數據庫的高級特性和新方法&#xff0c;詳細介紹了這些高級特性及其操作方式&#xff0c;并涵蓋了一些最新的操作…

客戶案例|某 SaaS 企業租戶敏感數據保護實踐

近年來&#xff0c;隨著云計算技術的快速發展&#xff0c;軟件即服務&#xff08;SaaS&#xff09;在各行業的應用逐漸增多&#xff0c;SaaS 應用給企業數字化發展帶來了便捷性、成本效益與可訪問性&#xff0c;同時也帶來了一系列數據安全風險。作為 SaaS 產品運營服務商&…

韓國鋰電池工廠火災:行業安全警鐘再次敲響

三天前&#xff0c;6月24日上午&#xff0c;韓國京畿道華城市一電池廠突發火災&#xff0c;造成嚴重人員傷亡&#xff0c;其中包括多名中國籍員工。這一事件不僅令人痛心&#xff0c;更為全球鋰電池行業安全敲響了警鐘。 事發當天&#xff0c;電池廠內堆放鋰電池成品的區域突然…

TypeError: %c requires int or char

踩坑&#xff1a;在用python寫腳本查詢sql數據時&#xff0c;使用%s來替換sql語句里的變量&#xff0c;結果一直報&#xff0c;而其他sql使用同樣的方法正常&#xff0c;最后發現是因為sql語句里有模糊查詢 like "%測試%"&#xff0c;這里的%被誤以為%s&#xff0c;解…

Mendix 創客訪談錄|Mendix開發制造業客戶復雜應用的強大實力

本期創客 鄭立 Eviden中國低代碼服務團隊負責人 大家好&#xff0c;我是鄭立&#xff0c;目前擔任Eviden中國低代碼服務團隊的負責人&#xff0c;Mendix是Eviden中國在低代碼領域的最重要的合作伙伴&#xff0c;目前我們在多個制造業客戶中推廣和實施Mendix低代碼項目&#xff…

[MQTT]Mosquitto的權限管理_使用者/密碼(pwfile)和訪問控制清單(aclfile)

延續Mosquitto的內網連接(intranet)和使用者/密碼權限設置文章&#xff0c;經解讀mosquitto官網文檔&#xff0c;在權限管理部分&#xff0c;除了設置使用者/密碼(pwfile)之外&#xff0c;還有訪問控制清單(Access Control List, aclfile)可以設置。經過測試&#xff0c;同時設…

Linux 中變量的取用與設定

優質博文&#xff1a;IT-BLOG-CN Linux是一個多人多任務的環境&#xff0c;每個人登錄系統都能取得一個bash shell&#xff0c;每個人都能夠使用bash下達mail這個指令來接收自己的郵箱等等。問題是&#xff0c;bash如何得知你的郵箱是那個文件&#xff1f;這就需要『變量』的幫…

【ubuntu noble】docker 容器無法使用 nvidia gpu

運行ai模型的時候提示 no GPU available 執行 nvidia-smi 提示 Failed to initialize NVML: Unknown Error 解決方案 一. 宿主機執行sudo docker info&#xff0c;確保 runtime 字段中有 nvidia 字樣 Runtimes: nvidia runc io.containerd.runc.v2 Default Runtime: runc 注…

從0開始學習pyspark--pyspark的核心概念[第0節]

在學習 PySpark時會遇到很多新的關鍵詞,理解這些概念,對我們學習PySpark有極大的幫助,以下是一些PySpark的關鍵概念及其詳細解釋&#xff1a; 1. PySpark PySpark是Apache Spark的Python API。Spark是一個用于大規模數據處理的開源分布式計算系統&#xff0c;支持內存計算和基…

基于Java的寵物領養管理系統【附源碼】

摘 要 近些年來&#xff0c;隨著科技的飛速發展&#xff0c;互聯網的普及逐漸延伸到各行各業中&#xff0c;給人們生活帶來了十分的便利&#xff0c;寵物管理系統利用計算機網絡實現信息化管理&#xff0c;使整個寵物領養的發展和服務水平有顯著提升。 本文擬采用IDEA開發工具…

《分析模式》漫談07-怎樣把一張圖從不嚴謹改到嚴謹

DDD領域驅動設計批評文集 做強化自測題獲得“軟件方法建模師”稱號 《軟件方法》各章合集 下圖是《分析模式》原書第2章的圖2.10&#xff0c;里面有一些錯誤和考慮不周的地方&#xff1a; 2004中譯本和2020中譯本的翻譯如下&#xff1a; 基本上都是照搬&#xff0c;沒有改過…