spring中@Configuration和@Bean注解的用法
概要
@Configuration里邊定義@Bean,@Configuration相當于一個xml配置文件,@Bean就是xml中的<bean/>
定義
bean依賴可以調用方法,比如這里的beanTwo()。你可能會好奇,如果beanTwo()被調用兩次會不會創(chuàng)建兩個beanTwo實例,因為spring bean的默認scope是單例;答案是不會創(chuàng)建多個實例的,@Configuration類實現(xiàn)原理是cglib,代理類繼承了配置類,然后重寫方法,從而實現(xiàn)攔截,這也是為什么配置類不能被final修飾。
@Configuration
public class AppConfig {
@Bean
public BeanOne beanOne() {
//bean依賴,直接調用本類方法beanTwo
return new BeanOne(beanTwo());
}
@Bean
public BeanTwo beanTwo() {
return new BeanTwo();
}
}如果跨@Configuration怎么辦?將依賴bean當做方法參數(shù)傳遞,無論是否同一個類都可以使用這種方式,實踐中這種用法更實用。
@Configuration
public class AppConfig1 {
//bean依賴,方法參數(shù)當作依賴
@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沒被注入,因為很有可能AutoWiredBeanPostProcessor在@Configuration實例化之后執(zhí)行。這是為什么呢? 這是因為static方法的BeanPostProcessor實例化時,不需要實例化@Configuration類,相當于執(zhí)行ConfigurationClass.staticMethod(); 而非static方法,依賴@Configuration類實例,相當于new ConfigurationClass().notStaticMethod();
到此這篇關于spring中@Configuration和@Bean注解的用法的文章就介紹到這了,更多相關spring的@Configuration和@Bean內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
利用HttpUrlConnection 上傳 接收文件的實現(xiàn)方法
下面小編就為大家?guī)硪黄肏ttpUrlConnection 上傳 接收文件的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11
Java如何利用CompletableFuture描述任務之間的關系
Java如何根據(jù)線程的執(zhí)行結果執(zhí)行下一步動作呢,F(xiàn)uture的另一個實現(xiàn)類CompletableFuture能夠優(yōu)雅的解決異步化問題,下面就跟隨小編一起了解一下吧2023-07-07

