裝配Bean
- 任何一個成功的應用都是由多個為了實現某個業務目標而相互協作的元件構成的
- 建立應用物件之間協作關係的行為通常稱為裝配(wiring),這也是依賴注入(DI)
Spring配置的可選方案
- 在XML中進行顯示配置
- 在Java中進行顯示配置
- 隱式的bean發現機制和自動裝配
自動化裝配bean
- 元件掃描(component scanning):Spring會自動發現應用上下文中所建立的bean
- 自動裝配(autowiring):Spring自動滿足bean之間的依賴
設定元件掃描的基礎包
- @ComponentScan:預設掃描當前所在的包
- @ComponentScan(“soundsystem”):表明你所設定的是基礎包
- @ComponentScan(basePackages=”soundsystem”)/@ComponentScan(basePackages={“soundsystem”, “video”}):更清晰表明設定的基礎包
- @ComponentScan(basePackageClasses={CDPlayer.class, DVDPlayer.class}):掃描這些類所在的包
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* 自動掃描當前包下的@Component
* 也可以啟用 XML <context:component-scan base-package="com.leaf.u_spring.chapter02" />
*/
@Configuration
@ComponentScan
public class CDPlayerConfig {
/**
* 隨機選擇一個CompactDisc來播放
* 這個例子可以看出@Bean的強大功能
*
* 還可以指定名稱
*/
@Bean(name="randomDisc")
public CompactDisc randomBeatlesCD(){
int choice = (int) Math.floor(Math.random() * 4);
if(choice == 0){
return new SgtPeppers();
} else if(choice == 1) {
return null;
} else if(choice == 2) {
return null;
} else {
return null;
}
}
}
通過Java程式碼裝配bean
- 顯示配置,JavaConfig是更好的方案,因為它更為強大、型別安全並且對重構友好
- 構造器和Setter方法只是@Bean方法的兩個簡單樣例
通過XML裝配bean
- 需要在配置檔案的頂部宣告多個XML模式(XSD)檔案,這些檔案定義了配置Spring的XML元素
- 建立和管理Spring XML配置檔案一種簡便方式:https://spring.io/tools/sts STS>File>New>Spring Bean Configuration File
- 宣告bean的方式:使用<bean>元素指定class屬性
- 藉助構造器注入初始化bean:<constructor-arg>元素和使用Spring3.0所引入的c-名稱空間
- c:cd-ref=”compactDisc”: c(名稱空間字首) cd(構造器引數名) ref(注入bean引用) compactDisc(要注入的bean的ID)
- 強依賴使用構造器注入,可選依賴使用屬性注入
匯入和混合配置
- 自動化和顯示配置不是互斥的
- @Import註解可以匯入JavaConfig到另一個JavaConifg中,或者在更高階類中把多個JavaConfig組合在一起
- @ImposrtResource註解,可以裝配xml到JavaConfig中
- <import>XML匯入另一個XML
- bean可以在XML中匯入JavaConfig
- 元件掃描 <context:component-scan>或@Componenet
- 裝配bean:自動化配置、基於Java的顯示配置以及基於XML的顯示配置
引用:《Spring In Action 4》第2章