Spring Boot 添加Bean

注:上節(jié)我們利用@Bean或者其他注解往Spring容器中添加一個Bean取胎,下面我們看一下向Spring容器中添加Bean的幾種方式。

@Bean

    @Bean
    public User user(){
        return new User();
    }

通過@Bean注解可往容器中添加Bean組件局劲,默認方法名為bean的Id,如果要特殊指定其名稱,可以使用@Bean("user"),詳細參考上一節(jié)

包掃描+@Component與其延伸注解

其實在項目中多用包掃描的方式屯仗,向容器中添加組件,可以在主配置類上搔谴,@Configuration和@ComponentScan魁袜,@ComponentScan默認掃描當前類所在的包,所以在Spring Boot程序中敦第,一般主程序類會建立在項目的根包中峰弹,然后利用@SpringBootApplication標注,@SpringBootApplication是一個組合注解包括@SpringBootConfiguration@EnableAutoConfiguration芜果、@ComponentScan三個注解鞠呈,其中就包含@ComponentScan注解,@ComponentScan還有其他屬性右钾,詳細查看上一小節(jié)蚁吝。

@Conditional
@Conditional注解是根據(jù)條件往容器中注冊Bean,它可以注冊在方法和類上旱爆,在SpringBoot自動配置中,廣泛利用@Conditional注解和它的延伸注解窘茁,往Spring容器中進行動態(tài)注冊怀伦。@ConditionalOnClass如果有這個類才注冊,@ConditionalOnMissingBean如果沒有這個Bean組件才注冊等等山林。

@Import

1) @Import

在容器中導入組件還可以通過@Import導入組建房待,例如:

@Configuration
@ComponentScan
@Import(User.class)
public class MainConfig {

}

如果使用@Import導入組件,導入的組件ID為其全類名捌朴。

2) ImportSelector

@Import組件的value如果是實現(xiàn)了ImportSelector接口吴攒,可以通過該類批量導入組件,該類的selectImports方法的返回值砂蔽,將會被注冊到Spring容器中洼怔,但該類本身并不會被導入到組件中。

3) ImportBeanDefinitionRegistrar

通過實現(xiàn)該類往容器中注冊一個Bean,例如

public class CustomImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar{
    @Override
    public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
        boolean b1 = beanDefinitionRegistry.containsBeanDefinition("mother");
        boolean b2 = beanDefinitionRegistry.containsBeanDefinition("father");
        if(b1&&b2){
            //獲取bean的定義信息
            RootBeanDefinition beanDefinition = new RootBeanDefinition(Child.class);
            beanDefinitionRegistry.registerBeanDefinition("child",beanDefinition);
        }
    }
}

實現(xiàn)FactoryBean

public class UserFactoryBean implements FactoryBean<User>{
    //通過getObject()方法創(chuàng)建對象左驾,如果是非單例镣隶,則在每次獲取時執(zhí)行該方法
    @Nullable
    @Override
    public User getObject() throws Exception {
        return new User();
    }
    //類型
    @Nullable
    @Override
    public Class<?> getObjectType() {
        return User.class;
    }
    //是否單例
    @Override
    public boolean isSingleton() {
        return true;
    }
}

該方式默認獲取到的工廠Bean調(diào)用getObject創(chuàng)建的對象;
如果獲取工廠Bean本身需要在ID前加&標識诡右,例如&userFactoryBean 安岂。

小結(jié):

本節(jié)課主要學習了如何往Spring容器中注冊Bean的4中方式,
1帆吻、通過@Bean
2域那、通過包掃描+@Component及其延伸組建
3、通過@Import(ImportSelector猜煮、ImportBeanDefinitionRegistrar)
4次员、通過實現(xiàn)工廠Bean(FactoryBean)
下節(jié)課我們學習Bean的生命周期相關的內(nèi)容。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末王带,一起剝皮案震驚了整個濱河市淑蔚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愕撰,老刑警劉巖刹衫,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搞挣,居然都是意外死亡带迟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門囱桨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仓犬,“玉大人,你說我怎么就攤上這事蝇摸∩艏纾” “怎么了办陷?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長律歼。 經(jīng)常有香客問我民镜,道長,這世上最難降的妖魔是什么险毁? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任制圈,我火速辦了婚禮,結(jié)果婚禮上畔况,老公的妹妹穿的比我還像新娘鲸鹦。我一直安慰自己,他們只是感情好跷跪,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布馋嗜。 她就那樣靜靜地躺著,像睡著了一般吵瞻。 火紅的嫁衣襯著肌膚如雪葛菇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天橡羞,我揣著相機與錄音眯停,去河邊找鬼。 笑死卿泽,一個胖子當著我的面吹牛莺债,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播签夭,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼齐邦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了覆致?” 一聲冷哼從身側(cè)響起侄旬,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤肺蔚,失蹤者是張志新(化名)和其女友劉穎煌妈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宣羊,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡璧诵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了仇冯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片之宿。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖苛坚,靈堂內(nèi)的尸體忽然破棺而出比被,到底是詐尸還是另有隱情色难,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布等缀,位于F島的核電站枷莉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏尺迂。R本人自食惡果不足惜笤妙,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望噪裕。 院中可真熱鬧蹲盘,春花似錦、人聲如沸膳音。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祭陷。三九已至薄嫡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颗胡,已是汗流浹背姨裸。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凤瘦,地道東北人溶浴。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像弧呐,于是被迫代替她去往敵國和親闸迷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,827評論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理俘枫,服務發(fā)現(xiàn)腥沽,斷路器,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • 1.1 Spring IoC容器和bean簡介 本章介紹了Spring Framework實現(xiàn)的控制反轉(zhuǎn)(IoC)...
    起名真是難閱讀 2,584評論 0 8
  • 1.1 spring IoC容器和beans的簡介 Spring 框架的最核心基礎的功能是IoC(控制反轉(zhuǎn))容器鸠蚪,...
    simoscode閱讀 6,719評論 2 22
  • 本來是準備看一看Spring源碼的今阳。然后在知乎上看到來一個帖子,說有一群**自己連Spring官方文檔都沒有完全讀...
    此魚不得水閱讀 6,935評論 4 21