spring中@Configuration和@Bean注解的用法
概要
@Configuration里邊定義@Bean,@Configuration相當(dāng)于一個(gè)xml配置文件,@Bean就是xml中的<bean/>
定義
bean依賴可以調(diào)用方法,比如這里的beanTwo()。你可能會好奇,如果beanTwo()被調(diào)用兩次會不會創(chuàng)建兩個(gè)beanTwo實(shí)例,因?yàn)閟pring bean的默認(rèn)scope是單例;答案是不會創(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ù)傳遞,無論是否同一個(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沒被注入,因?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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Springboot @Configuration @bean注解作用解析
- Spring @Bean注解配置及使用方法解析
- SpringBoot配置@Configuration注解和@bean注解
- Spring注解驅(qū)動之關(guān)于@Bean注解指定初始化和銷毀的方法
- SpringBoot?@Configuration與@Bean注解使用介紹
- Spring?@Bean注解深入分析源碼執(zhí)行過程
- 關(guān)于spring的@Bean注解放入引用Bean中初始化失敗分析
- Spring @Bean注解的使用場景與案例實(shí)現(xiàn)
- 深入解析Spring中的@Bean注解
- 一文讀懂Spring中@Bean注解的核心作用
相關(guān)文章
利用HttpUrlConnection 上傳 接收文件的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄肏ttpUrlConnection 上傳 接收文件的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11
Java如何利用CompletableFuture描述任務(wù)之間的關(guān)系
Java如何根據(jù)線程的執(zhí)行結(jié)果執(zhí)行下一步動作呢,F(xiàn)uture的另一個(gè)實(shí)現(xiàn)類CompletableFuture能夠優(yōu)雅的解決異步化問題,下面就跟隨小編一起了解一下吧2023-07-07
Mybatis傳遞多個(gè)參數(shù)的解決辦法(三種)
這篇文章主要介紹了Mybatis傳遞多個(gè)參數(shù)的解決辦法(三種),個(gè)人覺得第三種解決辦法比較好用,有需要的朋友一起學(xué)習(xí)吧2016-05-05
Spring實(shí)現(xiàn)上拉刷新和下拉加載效果
這篇文章主要為大家詳細(xì)介紹了Spring實(shí)現(xiàn)上拉刷新和下拉加載效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12

