spring中@Configuration和@Bean注解的用法
概要
@Configuration里邊定義@Bean,@Configuration相當(dāng)于一個(gè)xml配置文件,@Bean就是xml中的<bean/>
定義
bean依賴可以調(diào)用方法,比如這里的beanTwo()。你可能會(huì)好奇,如果beanTwo()被調(diào)用兩次會(huì)不會(huì)創(chuàng)建兩個(gè)beanTwo實(shí)例,因?yàn)閟pring bean的默認(rèn)scope是單例;答案是不會(huì)創(chuàng)建多個(gè)實(shí)例的,@Configuration類實(shí)現(xiàn)原理是cglib,代理類繼承了配置類,然后重寫方法,從而實(shí)現(xiàn)攔截,這也是為什么配置類不能被final修飾。
@Configuration public class AppConfig { @Bean public BeanOne beanOne() { //bean依賴,直接調(diào)用本類方法beanTwo return new BeanOne(beanTwo()); } @Bean public BeanTwo beanTwo() { return new BeanTwo(); } }
如果跨@Configuration怎么辦?將依賴bean當(dāng)做方法參數(shù)傳遞
,無(wú)論是否同一個(gè)類都可以使用這種方式,實(shí)踐中這種用法更實(shí)用。
@Configuration public class AppConfig1 { //bean依賴,方法參數(shù)當(dāng)作依賴 @Bean public BeanOne beanOne(BeanTwo beanTwo) { return new BeanOne(beanTwo); } } @Configuration public class AppConfig2 { @Bean public BeanTwo beanTwo() { return new BeanTwo(); } }
注意
如果@Bean方法返回的是BeanPostProcessor
,方法要用static
修飾,否則可能造成@Configuration中的@AutoWired、@Inject沒(méi)被注入,因?yàn)楹苡锌赡蹵utoWiredBeanPostProcessor在@Configuration實(shí)例化之后執(zhí)行。這是為什么呢? 這是因?yàn)閟tatic方法的BeanPostProcessor實(shí)例化時(shí),不需要實(shí)例化@Configuration類,相當(dāng)于執(zhí)行ConfigurationClass.staticMethod(); 而非static方法,依賴@Configuration類實(shí)例,相當(dāng)于new ConfigurationClass().notStaticMethod();
到此這篇關(guān)于spring中@Configuration和@Bean注解的用法的文章就介紹到這了,更多相關(guān)spring的@Configuration和@Bean內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Springboot @Configuration @bean注解作用解析
- Spring @Bean注解配置及使用方法解析
- SpringBoot配置@Configuration注解和@bean注解
- Spring注解驅(qū)動(dòng)之關(guān)于@Bean注解指定初始化和銷毀的方法
- SpringBoot?@Configuration與@Bean注解使用介紹
- Spring?@Bean注解深入分析源碼執(zhí)行過(guò)程
- 關(guān)于spring的@Bean注解放入引用Bean中初始化失敗分析
- Spring @Bean注解的使用場(chǎng)景與案例實(shí)現(xiàn)
- 深入解析Spring中的@Bean注解
- 一文讀懂Spring中@Bean注解的核心作用
相關(guān)文章
ocp開(kāi)閉原則_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了ocp開(kāi)閉原則的相關(guān)資料,ocp開(kāi)閉原則指導(dǎo)我們?nèi)绾谓⒁粋€(gè)穩(wěn)定的、靈活的系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Mybatis接口Mapper內(nèi)的方法為啥不能重載嗎
這篇文章主要介紹了Mybatis接口Mapper內(nèi)的方法為啥不能重載嗎,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09java數(shù)組排序示例(冒泡排序、快速排序、希爾排序、選擇排序)
java中在運(yùn)用數(shù)組進(jìn)行排序功能時(shí),一般有四種方法:快速排序法、冒泡法、選擇排序法、插入排序法(希爾排序(Shell Sort)是插入排序的一種),下面是一些示例,需要的朋友可以參考下2014-03-03關(guān)于break和continue以及l(fā)abel的區(qū)別和作用(詳解)
下面小編就為大家?guī)?lái)一篇關(guān)于break和continue以及l(fā)abel的區(qū)別和作用(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05