spring有三種裝配bean的方式:隱式裝配、java代碼裝配、xml裝配
隱式裝配最爲省事方便,也稱爲自動化裝配
java代碼裝配最爲強大、安全、友好重構
這三種裝配方式可以混搭着來用
隱式裝配和java代碼裝配都是註解配置
在這裏通過一個例子來講述配置
有一個CD播放器,要依賴CD才能播放
CD的兩個實現,一個是ThinkingJAVA,一個是LinuxBird
註解配置
定義bean
@Component
public class ThinkingJAVA{
public void play(){
System.out.println("java思想");
}
}
在這裏ThinkingJAVA被Component標識成一個bean,bean的id自動爲thinkingJAVA
@Component
public class CDPlayer {
@Autowired(required=true)
public CD cd;
public void play(){
cd.play();
}
}
cdPlayer中有一個自動cd,被標識爲自動裝配,且一定會裝配,如果容器中不存在CD類型的bean,那麼就會報錯,如果required=false,則表示可裝配時裝配,如果沒有的裝配則不會去裝配
隱式裝配
定義完bean了,現在要把bean裝配到容器AppliacationContext中
隱式裝配既自動掃包
因爲自動掃包默認是關閉的,可以通過java代碼開啓,也可以通過xml開啓
通過java代碼開啓自動掃包
@Configuration
//掃描當前類的包及其自包
//@ConponentScan()
//掃描string指定包及其子包
//不推薦這種方式,不利於代碼重構,也不好檢查錯誤
//@ConponenetScan(basePackages="soundsystem")
//掃描指定class所在的包及其子包
//推薦這種方式,利於代碼重構
//可以設置一個空接口用來標識基礎包
//表示掃描CD類和CDPlayer所在的包及其子包
@ConponentScan(basePackageClasses={CD.class,CDPlayer.class})
public class CDPlayerConfig {
}
最好把配置的類單獨放在配置包,不要跟業務邏輯攪在一起
xml開啓自動掃包
<context:component-scan base-package="要掃描的包及其子包"></context:component-scan>
在xml文件中加上這麼一句
java代碼裝配
@Configuration
public class CDPlayerConfig {
//指定bean
@Bean
public ThinkingJAVA thingkingJAVA(){
return new ThinkingJAVA();
}
@Bean
public CDPlayer cDPlayer(){
return new CDPlayer();
}
}
bean的id就是方法名
可以看到這種java代碼來裝配的方式
可以用java代碼來構造出實例,所以很強大,有很多種可能性
同時bean默認是單例的
混搭裝配
java代碼裝配和xml裝配可以整合起來
將兩個java裝配類合爲一個
現在有CDConfig.class和CDPlayer.class兩個裝配類
將他們合爲一個SoundsystemConfig.class
@Configuration
@Import(CDConfig.class,CDPlayer.class)
//如果要整合xml
//@ImportResource("classpath:cdconfig.xml")
public class SoundsystemConfig {
}