自動(dòng)裝備
最常用的一種方法了
代理這樣寫自后掃描包以及子包
@Component
public class SgtPeppers implements CompactDisc {
}
@Component
public class CDPlayer {
@Autowired
private CompactDisc cd;
}
@Configuration
@ComponentScan
public class CDPlayerConfig {
}
ComponentScan的參數(shù)
@ComponentScan({"com.my.package.first","com.my.package.second"})
@ComponentScan("com.my.package")
@ComponentScan(basePackageClasses={CDPlayer.class, DVDPlayer.class})
或者寫在配置文件里
<context:coponent-scan base-package="soundsystem"/>
java代碼中創(chuàng)建Bean
@Configuration
public class CDPlayerConfig {
@Bean
public CompactDisk sgtPeppers() {
return new SgtPeppers();
}
@Bean
public CDPlayer cdPlayer() {
// 這里看起來是每次new出來其實(shí)被spring攔截了
// 只new了一個(gè)
// 還可以寫在參數(shù)里會(huì)更清楚一些
return new CDPlayer(sgtPeppers());
}
@Bean
public XXPlayer xxPlayer(CompactDisk disk) {
return new XXPlayer(disk);
}
}
使用xml裝備
不推薦使用驾荣,但是有一些第三方庫使用了xml創(chuàng)建bean景埃,那么沒有辦法了描函。
混合配置
一些第三方庫使用了XML可以使用JavaConfig導(dǎo)入XML配置
@Configuration
public class CDConfig {
@Bean
public CompactDisc compactDisc() {
return new SgtPeppers();
}
}
@Configuration
@Import(CDPlayerConfig.class) // 作用是引入CDPlayerConfig定義的Bean
@ImportResource("classpath:cd-config.xml")
public SoundSystemConfig {
}