裝配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章