圖解Spring容器中實(shí)例化bean的四種方式
前言
Spring IOC容器如何實(shí)例化Bean呢?傳統(tǒng)應(yīng)用程序可以通過new和反射方式進(jìn)行實(shí)例化Bean。而Spring IOC容器則需要根據(jù) Bean 定義里的配置元數(shù)據(jù),使用反射機(jī)制來創(chuàng)建Bean。
在Spring IOC容器中根據(jù)Bean定義創(chuàng)建Bean主要有以下幾種方式:
1.使用構(gòu)造器實(shí)例化Bean
這是最簡單的方式,Spring IOC容器既能使用1.默認(rèn)空構(gòu)造器也能使用2.有參數(shù)構(gòu)造器兩種方式創(chuàng)建Bean,如以下方式指定要?jiǎng)?chuàng)建的Bean類型:
1.1 使用空構(gòu)造器
使用空構(gòu)造器進(jìn)行定義,使用此種方式,class屬性指定的類必須有空構(gòu)造器
1.2 使用有參構(gòu)造器
使用有參構(gòu)造器進(jìn)行定義,使用此種方式,可以使用<constructor-arg>標(biāo)簽指定構(gòu)造器參數(shù)值,其中index表示位置,value表示常量值,也可以指定引用,指定引用使用ref來引用另一個(gè)Bean定義;
2.使用靜態(tài)工廠方式實(shí)例化Bean
使用這種方式,除了指定必須的class屬性,還要使用factory-method屬性來指定實(shí)例化Bean的方法,而且使用靜態(tài)工廠方法也允許指定方法參數(shù),spring IOC容器將調(diào)用此屬性指定的方法來獲取Bean。
Hello.java
靜態(tài)工廠類,返回一個(gè)Hello對象
靜態(tài)工廠類,返回一個(gè)Hello對象
測試類,輸出helloworld
3.使用實(shí)例工廠方法實(shí)例化Bean
使用這種方式不能指定class屬性,此時(shí)必須使用factory-bean屬性來指定工廠Bean,factory-method屬性指定實(shí)例化Bean的方法,而且使用實(shí)例工廠方法允許指定方法參數(shù),方式和使用構(gòu)造器方式一樣。
Hello.java
實(shí)例工廠方法 HelloInstanceFactory1.java(只是去掉了static關(guān)鍵字)
bean配置
測試類,輸出helloworld2
4.用 setter 方式
bean配置
這種方式,只要寫上對應(yīng)的set、get方法,然后再bean.xml文件中利用property注入值即可
到此這篇關(guān)于圖解Spring容器中實(shí)例化bean的四種方式的文章就介紹到這了,更多相關(guān)Spring實(shí)例化bean內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
kafka運(yùn)維consumer-groups.sh消費(fèi)者組管理
這篇文章主要為大家介紹了kafka運(yùn)維consumer-groups.sh消費(fèi)者組管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Spring Cloud Gateway 獲取請求體(Request Body)的多種方法
這篇文章主要介紹了Spring Cloud Gateway 獲取請求體(Request Body)的多種方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01PowerJob的AbstractScriptProcessor實(shí)現(xiàn)類工作流程源碼解讀
這篇文章主要為大家介紹了PowerJob的AbstractScriptProcessor源碼流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Spring?Boot中的max-http-header-size配置方式
這篇文章主要介紹了Spring?Boot中的max-http-header-size配置方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09Resilience4J通過yml設(shè)置circuitBreaker的方法
Resilience4j是一個(gè)輕量級、易于使用的容錯(cuò)庫,其靈感來自Netflix Hystrix,但專為Java 8和函數(shù)式編程設(shè)計(jì),這篇文章主要介紹了Resilience4J通過yml設(shè)置circuitBreaker的方法,需要的朋友可以參考下2022-10-10