Session 2 Spring 裝配bean的三種方式(注解,xml,自動(dòng)裝配)

裝配bean的概念

spring到底做了啥?

spring容器負(fù)責(zé)創(chuàng)建應(yīng)用程序中的bean,并通過di來協(xié)調(diào)bean相互之間的關(guān)系,所以spring提供了三種方式:
1:通過xml顯示配置,這種方式在以前的編碼中經(jīng)常用到,但是現(xiàn)在已經(jīng)漸漸的被第二種方式所取代了,所以本篇文章我們就不討論這種配置方式了。因?yàn)?,我也忘了是如何配置的了?br> 2:在JAVA中顯示配置,這是現(xiàn)在常用的一種裝配bean的方式,相比于xml她會(huì)更加的簡(jiǎn)潔并且易讀。
3:隱式的bean發(fā)現(xiàn)機(jī)制和自動(dòng)裝配

那現(xiàn)在就讓我們先來聊一聊第三種方式,spring自動(dòng)裝配
spring通過兩個(gè)角度來實(shí)現(xiàn)自動(dòng)化配置
1、組件掃描(component scanning)spring會(huì)自動(dòng)發(fā)現(xiàn)應(yīng)用上下文中的所創(chuàng)建的bean并將他們加載進(jìn)來。
2、自動(dòng)裝配(autowiring)spring自動(dòng)滿足bean之間的依賴關(guān)系。

接下來我們用例子來說明,首先我們先來創(chuàng)建兩個(gè)東西,一個(gè)是游戲機(jī),一個(gè)是游戲光盤

/**
 * 這是一個(gè)游戲光盤的實(shí)現(xiàn)
 */
@Component
public class GameDisc implements Disc{
    @Override
    public void play() {
        System.out.println("來一起玩真三國無雙吧");
    }
}


@Configuration
@ComponentScan
public class DiscConfig {
}

可以看出,我們?cè)贕ameDisc上加了@Component注解,這個(gè)注解的意思就是將這個(gè)類聲明成一個(gè)組件,Spring就可以自動(dòng)裝配這個(gè)Bean,我們?cè)贒iscConfig上加了一個(gè)@ComponentScan注解表示在Spring中開啟了組件掃描,就可以掃描到這個(gè)GameDisc的Bean了。這就是Spring的自動(dòng)裝配機(jī)制。

接下來我們來看看顯示的JAVA配置是如何實(shí)現(xiàn)的。
現(xiàn)在我們把config上面的@ComponentScan去掉,這樣他就不能自動(dòng)掃描bean了,這個(gè)時(shí)候再測(cè)試的時(shí)候就會(huì)報(bào)出BeanCreationException。這樣的話我們就需要自己手動(dòng)配置這個(gè)bean了

@Configuration
public class DiscConfig {
    @Bean
    public Disc gameDisc(){
        return  new GameDisc();
    }
}

默認(rèn)狀態(tài)Spring創(chuàng)建的bean是單例的,也就是說如果這樣

@Configuration
public class DiscConfig {
    @Bean
    public Disc gameDisc(){
        return  new GameDisc();
    }

 @Bean
    public Disc anotherGameDisc(){
        return  new GameDisc();
    }
}

這種情況如果第一次已經(jīng)創(chuàng)建了這個(gè)bean的話,第二次就不會(huì)再創(chuàng)建這個(gè)bean了,當(dāng)然也可以手動(dòng)調(diào)節(jié)為多例的。所以一般情況下我們沒必要去創(chuàng)建第二個(gè)相同的bean。
(tips @Bean可以以任何JAVA的形式去創(chuàng)建bean,構(gòu)造器和setter等,這里存在的可能性只是受到了java語言的限制)

關(guān)于xml的配置方式就不說了,懶得看了。。。。多說一句,一般來說能用自動(dòng)配置盡量用自動(dòng)配置,畢竟比較方便,而用到j(luò)avaconfig主要是因?yàn)楸热缫肓似渌膉ar,但是它的類上面又沒有@Component所以只能自己配置了。
關(guān)于Spring裝配bean就說這些了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • 1.1 spring IoC容器和beans的簡(jiǎn)介 Spring 框架的最核心基礎(chǔ)的功能是IoC(控制反轉(zhuǎn))容器,...
    simoscode閱讀 6,851評(píng)論 2 22
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,272評(píng)論 6 342
  • 本章內(nèi)容: 聲明Bean 構(gòu)造器注入和Setter方法注入 裝配Bean 控制bean的創(chuàng)建和銷毀 任何一個(gè)成功的...
    謝隨安閱讀 1,750評(píng)論 0 9
  • 2.1 Spring配置的可選方案 Spring提供了三種主要的裝配機(jī)制: 1)在XML中進(jìn)行顯示配置。2)在ja...
    如一諾然閱讀 565評(píng)論 0 1

友情鏈接更多精彩內(nèi)容