spring IOC介紹

spring的Ioc真是個好東西啊,那它到底是什么東西呢,控制反轉,到底是怎么轉的呢?

假設啊你現在是一個導演,想排部戲,那是不是得需要演員和舞臺(spring中的bean),如果按平常的編程思維就是new 一個actor,一個stage ,然后actor 開始perform。但如果你利用控制反轉(Ioc),一開始,演員就自動給你送來了,不用去你找也不用你去new,演員表演需要舞臺,這個時候舞臺也隨著演員一起出現了,這個稱為依賴注入(DI)。

接下來我們來看看一個Bean是從注冊到使用走過了一個什么歷程。

首先我們認識下spring容器,BeanFactory和ApplicationContext,由于后者是建立在前者之上的,我們先看前者。它有個BeanFactory接口,定義了如何訪問管理容器內的Bean方法。還有個BeanDefinitionRegistry接口,專門管理Bean的注冊,配置。默認一個DefaultListableBeanFactory實現了上述兩接口。而Bean的注冊信息即BeanDefinition可通過bindViaCode方法來自行編碼完成注冊,也可分別通過bindViaproperties或bindViaXml方法利用BeanDefinitionReader來載入properties文件或xml配置文件注冊。現在最常用的就是通過xml文件來配置,可用Setter方法注入或構造方法注入(點擊查看:Spring Ioc的一個Demo)。

當注冊好Bean之后,就等著容器啟動還有調用啦。如果用的是BeanFatory容器,那它默認是延遲加載實例化Bean的,即當你用到這個Bean時它才幫你實例化了送過來;如果用的是ApplicationContext容器,那是可容器一啟動即實例化所有的Bean的。

從Bean的實例化到準備就緒等待使用中間還要走好常的路呢,首先容器啟動的時候,有時我們還需要對配置文件做一些處理,如${jdbc.passwd}此類占位符的二次加載啊還有其他對配置文件的再處理的,我們會用到BeanFactoryPostProcessor,然后Bean實例化后并不馬上成為就緒狀態,這時候BeanWrapper會對其包裹返回一個BeanWrapper實例,下階段是設置初始屬性值,接下來就是Aware接口,依賴注入就是靠這個實現啦,它要檢查是否還有需要其他Bean的注入,之后進入關鍵的BeanPostProcessor處理,為什么說是關鍵的呢,因為在這個階段會做一些諸如生成代理的行為,Spring AOP(點擊查看:Spring Aop 原理總結)就靠它了,還有初始化方法啊都在這里。總之,就是一個本來很純凈的Bean,我們將我們所需要的東西都加工上去,最后返回它的一個代理。

自此一個Bean從注冊到誕生準備做貢獻的過程就是這樣了。

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

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

相關文章

vue-baidu-map實現在地圖上選擇范圍并解決相關問題

vue-baidu-map實現在地圖上選擇范圍并解決相關問題 實現地圖上選擇不規則范圍實現功能遇到的問題1、覆蓋物多邊形怎么才能蓋住覆蓋物點2、遇到其他問題 實現地圖上選擇不規則范圍 這個功能比較簡單,只需要使用vue-baidu-map插件的覆蓋物多邊形功能就行了。直接看文…

Win10專業版找不到安全中心選項的解決方法

在Win10電腦中,安全中心功能起到很大的作用。但是,有用戶在Win10專業版電腦上找不到安全中心選項,從而影響到自己的正常使用。下面小編分享解決Win10專業版系統沒有安全中心的簡單方法,解決后在Win10專業版就能成功找到安全中心了…

哈希表及其基礎(java詳解)

目錄 一、哈希表基礎 二、哈希函數的設計 哈希函數的設計原則 三、java中的hashCode 基本數據類型的hashCode使用 自定義類型的hashCode使用 需要注意 四、哈希沖突的處理 鏈地址法Seperate Chaining 五、實現屬于我們自己的哈希表 六、哈希表的動態空間處理和復雜…

通過項目管理軟件監管新員工入職流程的方法與策略

項目管理軟件是什么?項目管理軟件都能做什么?是不是只有項目團隊需要啊?NO!項目管理軟件乍聽其名不免讓人覺得這不過是個項目領域的專用工具。 那什么是項目呢?項目是為創造獨特的產品、服務或成果而進行的體系化的工…

物聯網+AI智慧工地云平臺源碼(SaaS模式)

智慧工地云平臺充分運用數字化技術,聚焦施工現場崗位一線,依托物聯網、互聯網、AI等技術,圍繞施工現場管理的人、機、料、法、環五大維度,以及施工過程管理的進度、質量、安全三大體系為基礎應用,實現全面高效的工程管…

stm32中滴答定時器與普通定時器的區別

1、兩者在單片機中的位置不一樣 滴答定時器在內核上,普通定時器在外設上。 由于位置不同,滴答定時器的程序可以移植到所有相同內核的芯片上,但普通定時器的程序卻不可以。 2、兩者的中斷優先級不一樣 滴答定時器優先級高,普通定…

CTF刷題記錄

刷題 我的md5臟了KFC瘋狂星期四坤坤的csgo邀請simplePHPcurl 我的md5臟了 g0at無意間發現了被打亂的flag:I{i?8Sms??Cd_1?T51??F_1?} 但是好像缺了不少東西,flag的md5值已經通過py交易得到了:88875458bdd87af5dd2e3c750e534741 flag…

關于微信/支付寶等平臺驗簽/簽名sign生成算法

引言 我們在日常工作中經常會遇到對接微信平臺、支付寶平臺、或者自己對外開放一個api服務,那么這里經常會出現一個名字:sgin(簽名)。 舉個栗子 這是微信支付統一下單接口文檔,最簡單的理解就是,服務端為…

Unirest-Java:Java發起GET、POST、PUT、DELETE、文件上傳,文件下載工具類介紹

一、簡介 Unirest-Java是一個輕量級的HTTP客戶端庫,用于在Java應用程序中發送HTTP請求。 它提供了簡單易用的API,可以方便地處理GET、POST、PUT、DELETE等HTTP方法。 Unirest-Java支持異步和同步請求,可以輕松地與JSON、XML等數據格式進行…

最優化方法復習——線性規劃之對偶問題

一、線性規劃對偶問題定義 原問題: 對偶問題: (1)若一個模型為目標求 “極大”,約束為“小于等于” 的不等式,則它的對偶模型為目標求“極小”,約束是“大于等于”的不等式。即“Max&#xff0…

2024年甘肅省職業院校技能大賽信息安全管理與評估三階段理論樣題一

2024年甘肅省職業院校技能大賽高職學生組電子與信息大類信息安全管理與評估賽項樣題一 第六部分 理論技能與職業素養(100 分) 【注意事項】 1.該部分答題時長包含在第三階段競賽時長內,請在臨近競賽結束前提交。 2.參賽團隊可根據自身情況…

數據庫系統概論復習資料

數據庫系統概論考試需知 一、分值分布 1、判斷題(10分) 1分一個 2、填空題(20分) 2分一個 3、選擇題(20分) 2分一個 4、分析題(30分) 第一題10分,第二題…

如何設置echart圖表在vue頁面屏幕比例縮放自適應問題

問題&#xff1a;頁面的echart圖表在瀏覽器縮放屏幕比例時無法隨著屏幕的比例自動改變大小 解決方式&#xff1a; 可以通過監聽窗口的 resize 事件&#xff0c;并在事件回調函數中重新調整圖表的大小。 <template><div ref"chartContainer" style"w…

Enterprise Architect 12版本使用教程

Enterprise Architect 12版本使用教程 1.下載安裝Enterprise Architect 122.Enterprise Architect原始DDL模板配置及存在的問題1.DDL Column Definition原始模板&#xff08;沒有default值&#xff1a;可忽略&#xff09;2.DDL Data Type原始模板&#xff08;timestamp等時間字…

Apollo新版本Beta自動駕駛技術沙龍參會體驗有感—百度自動駕駛開源框架

在繁忙的都市生活中&#xff0c;我們時常對未來的科技發展充滿了好奇和期待。而近日&#xff0c;我有幸參加了一場引領科技潮流的線下技術沙龍&#xff0c;主題便是探索自動駕駛的魅力——一個讓我們身臨其境感受創新、了解技術巨擘的機會。 在12月2日我有幸參加了Apollo新版本…

智能優化算法應用:基于沙貓群算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于沙貓群算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于沙貓群算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.沙貓群算法4.實驗參數設定5.算法結果6.參考文獻7.…

kotlin協程反編譯java學習原理

前情提要 GlobalScope.launch(Dispatchers.Main) { // 默認是Default異步 // 1.從當前協程體作用域Dispatchers.Main 協程依附的線程 到 掛起點 掛起函數 到 執行 請求耗時操作 而 切換到 IO異步線程 // 2.IO異步線程執行完成后&#xff0c;開始恢復&#xff0c;當前作…

modbus轉profinet網關解決plc插槽號不夠用的情況

PLC作為常用的控制設備之一&#xff0c;其插槽號有時會限制外部設備的連接數量。然而&#xff0c;通過使用modbus轉profinet網關&#xff0c;可以解決這一問題。這種設備能夠將modbus協議轉換為profinet協議&#xff0c;實現PLC與更多外部設備的連接。 modbus轉profinet網關還具…

游戲盾的防御原理以及為什么程序類型更適合接入游戲盾。

游戲盾是一種專門用于游戲服務器的安全防護服務&#xff0c;旨在抵御各種網絡攻擊。它的原理主要包括以下幾個方面&#xff1a; 流量清洗和過濾&#xff1a;游戲盾會對進入游戲服務器的流量進行實時監測、分析和過濾。它通過識別惡意流量和攻擊流量&#xff0c;過濾掉其中的攻擊…

瀏覽器渲染頁面的過程以及原理

什么是瀏覽器渲染 簡單來說&#xff0c;就是將HTML字符串 —> 像素信息 渲染時間點 瀏覽器什么時候開始渲染&#xff1f; 網絡線程發送請求&#xff0c;取回HTML封裝為渲染任務并將其傳遞給渲染主線程的消息隊列。 問題&#xff1a;只取回HTML嗎&#xff1f;那CSS和JS呢&am…