裝配bean

spring有三種裝配bean的方式:隱式裝配、java代碼裝配、xml裝配

隱式裝配最爲省事方便,也稱爲自動化裝配

java代碼裝配最爲強大、安全、友好重構

這三種裝配方式可以混搭着來用

隱式裝配和java代碼裝配都是註解配置

在這裏通過一個例子來講述配置


cd

有一個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 {
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章