SpringBoot底層注解詳解
一、 @Configuration
我們先來看看,以前我們用spring是怎么配置bean的屬性值:
雖然不算多,但是如果每一個(gè)bean都這樣配置,屬實(shí)不容易。這個(gè)時(shí)候我們的@Configuration來了,看他是怎么進(jìn)行配置bean的:
直接在類上加上@Configuration注解,告訴SpringBoot,我們Myconfig是個(gè)配置類哈!然后我們只需要?jiǎng)?chuàng)建方法返回一個(gè)對象,再在方法上添加@Bean注解將它交給容器來注冊。如果我們以后要獲取Bean對象,只需要調(diào)用這個(gè)方法就行了,不過需要注意的是它默認(rèn)的就是單例的,這和spring一樣,如果我們想要它成為多例需要設(shè)置一下@Configuration注解里面的proxyBeanMethods屬性,因此我們引出了FULL和LITE模式。
Full模式和Lite模式
Full
模式是指proxyBeanMethods = true
,開啟代理bean的方法。此時(shí)調(diào)用配置類中每一個(gè)給而容器注冊組件方法,都會(huì)從容器中找組件,保持單例模式。它保證了每個(gè)@Bean方法無論被調(diào)用多少次,返回的組件都是單例的。
Lite
模式是指proxyBeanMethods = false
,關(guān)閉代理bean的方法。容器中不會(huì)保存代理對象,每一次調(diào)用配置類里面的方法,·都會(huì)產(chǎn)生一個(gè)新的對象。這可以解決組件依賴的問題。它保證了每個(gè)@Bean方法調(diào)用多少次返回的組件都是新創(chuàng)建的。
那么我們應(yīng)該思考什么時(shí)候用Full模式什么時(shí)候用Lite模式?
二、@Import 導(dǎo)入組件
我們先看一下這個(gè)注解的內(nèi)部結(jié)構(gòu)。
三、@Conditional
條件裝配注解:滿足我們Conditional指定的條件,就進(jìn)行組件注入,不然不進(jìn)行組件注入。
我們發(fā)現(xiàn)它的子注解還是相對比較多的,我們挑幾個(gè)常見的注解來說一下:
案例:
這里我們故意將這個(gè)@Bean("tom")注釋掉,但是我們依然保留user01(),我們看看我們的容器中有沒有包含user01這個(gè)組件:
false,很遺憾,因?yàn)?rdquo;tom“,user01也無法被注冊了。
四、@ImportResource
這個(gè)注解是用來導(dǎo)入spring配置文件的
五、@ConfigurationProperties
這個(gè)注解是用來進(jìn)行配置綁定的。
我們有兩種方法:
方法一:@Component+@ConfigurationProperties組合使用
我們在核心配置文件applicantion.properties中配置前綴為mycar的值
我們看一下網(wǎng)頁上這個(gè)car的屬性是什么?
與我們在核心配置文件配置的值相同。
方法二:@EnableConfigurationProperties+@ConfigurationProperties組合使用
@EnableConfigurationPropertise:開啟組件屬性配置功能,并把這個(gè)組件自動(dòng)注冊到容器中。
需要注意的是: @ConfigurationProperties不會(huì)像Spring容器注入相關(guān)處理類,只是起到相關(guān)標(biāo)記作用,相關(guān)處理邏輯還是由@EnableConfigurationPropertise導(dǎo)入處理類來完成。僅僅被標(biāo)記EnableConfigurationPropertise注解的類,默認(rèn)情況下也不會(huì)注冊為Bean。
以上就是SpringBoot底層注解詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot底層注解的資料請關(guān)注腳本之家其它相關(guān)文章!
以上就是SpringBoot底層注解詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot底層注解的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
怎樣通過反射獲取非靜態(tài)內(nèi)部類實(shí)例
這篇文章主要介紹了怎樣通過反射獲取非靜態(tài)內(nèi)部類實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03java 數(shù)據(jù)結(jié)構(gòu)中棧和隊(duì)列的實(shí)例詳解
這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)中棧和隊(duì)列的實(shí)例詳解的相關(guān)資料,主要使用數(shù)組與線性表的方法來實(shí)現(xiàn),需要的朋友可以參考下2017-09-09SpringBoot3.0+SpringSecurity6.0+JWT的實(shí)現(xiàn)
本文主要介紹了SpringBoot3.0+SpringSecurity6.0+JWT的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11mybatis之調(diào)用帶輸出參數(shù)的存儲(chǔ)過程(Oracle)
這篇文章主要介紹了mybatis調(diào)用帶輸出參數(shù)的存儲(chǔ)過程(Oracle),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11簡單了解Thymeleaf語法 數(shù)據(jù)延遲加載使用實(shí)例
這篇文章主要介紹了簡單了解Thymeleaf語法 數(shù)據(jù)延遲加載使用實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2010-05-05RxJava+Retrofit+Mvp實(shí)現(xiàn)購物車
這篇文章主要為大家詳細(xì)介紹了RxJava+Retrofit+Mvp實(shí)現(xiàn)購物車功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05