Spring中的bean裝配

建立對象之間的關聯關係的傳統作法(經過構造器或者查找)會致使對象之間高度耦合,難以複用和測試。在Spring中,對象無需本身建立、查找與之關聯的其餘對象,容器負責把須要相互協做的對象引用賦予各個對象。安全

Spring容器負責建立應用程序中的bean並經過DI來協調這些對象之間的關係。框架

裝配(wiring):建立應用對象之間協做的行爲。是經過DI完成的。ide

開發人員須要告訴Spring要建立哪些bean、如何將其裝配一塊兒。 測試

Spring中有三種主要的裝配機制:spa

  • 在XML中進行顯式裝配
  • 在Java中進行顯式裝配
  • 隱式的bean發現機制和自動裝配

三種裝配方式能夠搭配使用。優先使用自動裝配、Java顯式裝配、XML顯式裝配。code

自動化裝配

  • 組件掃描(component scanning)。自動尋找帶@Component註解的類,併爲其建立bean。
  • 自動裝配(autowiring)

@Component註解代表該類做爲一個組件類,Spring會爲這個類建立bean。component

@ComponentScan啓動組件掃描,默認掃描與配置類相同的包及子包,查找帶@Component註解的類,併爲其建立bean。對象

Spring中的組件掃描默認不開啓,須要經過Java配置類或XML配置文件配置開啓。blog

@Configuration
@ComponentScan
public class CDPlayerConfig {
}

XML配置開啓組件掃描接口

<context:component-scan base-package="yourpackage"/>

爲bean命名

Spring上下文中全部的bean都會給定一個ID。

若是沒有設置,Spring根據類名指定一個ID,如SgtPeppers的ID爲sgtPeppers。

能夠經過@Component("lonelyHeartsClub")指定bean的ID爲lonelyHeartsClub。

Spring也支持@Named("lonelyHeartsClub")爲bean命名。

設置組件掃描的基礎包

@ComponentScan默認以配置類所在的包爲基礎包來掃描組件。若是要將配置類放在單獨的包中,與其餘的應用代碼區分開來,則必需要設置基礎包。

在@ComponentScan的value屬性設置包名,如:

@ComponentScan("soundsystem")

或者明確使用basePackages屬性設置,可設置多個基礎包:

@ComponentScan(basePackages={"soundSystem", "video"})

使用basePackageClasses屬性設置,這樣類型安全,basePackageClasses設置的是基礎包中所包含的接口和類

@ComponentScan(basePackageClasses={CDPlayer.class})

自動裝配

使用@Autowired聲明自動裝配。@Autowired能夠用在構造器和方法上,Spring嘗試知足方法參數上的全部聲明。

若是Spring上下文中只有一個bean匹配依賴的話,這個bean會被裝配進來。

若是沒有bean匹配,建立上下文時會拋出異常

Java顯式配置

在將第三方庫的組件裝配到應用中時,須要使用顯式裝配,沒法使用自動裝配。

@Configuration註解代表這個類是個配置類,該類包含建立bean的細節。

@Bean註解代表這個方法將會返回一個對象,要註冊爲bean。

默認狀況下,bean的ID和方法名同樣,也能夠經過name屬性指定。

在JavaConfig中裝配依賴,能夠直接調用建立bean的方法,或者在方法中聲明參數。

@Configuration
public class CDPlayerConfig {
    @Bean(name = "lonelyHeartsClubBand")
    public CompactDisk sgtPeppers() {
        return new SgtPeppers();
    }

    @Bean
    public CDPlayer cdPlayer() {
        return new CDPlayer(sgtPeppers());
    }

    public CDPlayer cdPlayer(CompactDisc compactDisc) {
        return new CDPlayer(compactDisc);
    }
}

Spring中bean裝配方式的混合配置

Spring的這些配置方式不是互斥的,是能夠混用的。

Spring框架的核心是Spring容器。容器負責組件的生命週期,建立這些組件並知足它們的依賴,組件才能去完成任務。

Spring裝配bean的三種方式:自動化裝配、基於Java的顯式裝配、基於XML的顯式裝配。

使用三種方式的優先級是:儘量使用自動化裝配,減小維護成本。而後是基於Java的顯式裝配,比XML裝配功能強大、類型安全並已於重構。最後是基於XML的顯式裝配。

相關文章
相關標籤/搜索