springboot聲明bean的六種方式

茴香豆的四種寫法冲九。硼莽。

----聲明bean----
1.@Component 聲明普通bean
2.@Component 聲明FactoryBean

@Component
public class MyFactory implements FactoryBean<MytestBean> {
 @Override
    public MytestBean getObject() throws Exception {
        return new MytestBean();
    }

    @Override
    public Class<?> getObjectType() {
        return MytestBean.class;
    }
}

3.在配置類中使用@Bean

@Configuration
public class MyConfig {
    @Bean
    public Mytestbean create(){}
}

----手動注冊BeanDefinition----
4.使用BeanDefinitionRegistryPostProcessor注冊BeanDefinition

@Component
public class MyBeanRegister implements BeanDefinitionRegistryPostProcessor {
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
        beanDefinition.setBeanClass(MytestBean.class);
        beanDefinition.setSynthetic(true);
        MutablePropertyValues mpv = beanDefinition.getPropertyValues();
        mpv.addPropertyValue("age", "25");
        registry.registerBeanDefinition("mytestBean", beanDefinition);
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

    }
}

5.使用@Import + ImportBeanDefinitionRegister注冊BeanDefinition

public class MyBeanImport implements ImportBeanDefinitionRegistrar{
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
        beanDefinition.setBeanClass(MytestBean.class);
        beanDefinition.setSynthetic(true);
        MutablePropertyValues mpv = beanDefinition.getPropertyValues();
        mpv.addPropertyValue("age", "25");
        registry.registerBeanDefinition("mytestBean", beanDefinition);
    }
}
在Bootstrap啟動類或者一個配置類中使用:
@Import(MyBeanImport.class)

6.引入xml配置文件,除了老項目升級基本上不用绕辖,沒啥好說的

不同注冊方式執(zhí)行的順序不同颊乘,總體上順序:ImportBeanDefinitionRegister > BeanDefinitionRegistryPostProcessor > @Bean = @Component

如果用注冊FactoryBean<MyBean>的方式來提供bean的話,Spring并不能管理好依賴的先后順序宁炫,所以如果依賴MyBean的bean先被spring裝配,就會出現(xiàn)找不到bean的情況氮凝,這時候可以讓bean同時依賴對應的FactoryBean以確保FactoryBean被先注冊羔巢。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市罩阵,隨后出現(xiàn)的幾起案子竿秆,更是在濱河造成了極大的恐慌,老刑警劉巖稿壁,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幽钢,死亡現(xiàn)場離奇詭異,居然都是意外死亡傅是,警方通過查閱死者的電腦和手機匪燕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喧笔,“玉大人帽驯,你說我怎么就攤上這事∈檎ⅲ” “怎么了尼变?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長梗劫。 經(jīng)常有香客問我享甸,道長截碴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任蛉威,我火速辦了婚禮日丹,結果婚禮上,老公的妹妹穿的比我還像新娘蚯嫌。我一直安慰自己哲虾,他們只是感情好,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布择示。 她就那樣靜靜地躺著束凑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪栅盲。 梳的紋絲不亂的頭發(fā)上汪诉,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音谈秫,去河邊找鬼扒寄。 笑死,一個胖子當著我的面吹牛拟烫,可吹牛的內(nèi)容都是我干的该编。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼硕淑,長吁一口氣:“原來是場噩夢啊……” “哼课竣!你這毒婦竟也來了?” 一聲冷哼從身側響起置媳,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤于樟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后半开,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隔披,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡赃份,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年寂拆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抓韩。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡纠永,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谒拴,到底是詐尸還是另有隱情尝江,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布英上,位于F島的核電站炭序,受9級特大地震影響啤覆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惭聂,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一窗声、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辜纲,春花似錦笨觅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扫俺,卻和暖如春苍苞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背狼纬。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工柒啤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畸颅。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓担巩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親没炒。 傳聞我的和親對象是個殘疾皇子涛癌,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

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