自动装备
最常用的一种方法了
代理这样写自后扫描包以及子包
@Component
public class SgtPeppers implements CompactDisc {
}
@Component
public class CDPlayer {
@Autowired
private CompactDisc cd;
}
@Configuration
@ComponentScan
public class CDPlayerConfig {
}
ComponentScan的参数
@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代码中创建Bean
@Configuration
public class CDPlayerConfig {
@Bean
public CompactDisk sgtPeppers() {
return new SgtPeppers();
}
@Bean
public CDPlayer cdPlayer() {
// 这里看起来是每次new出来其实被spring拦截了
// 只new了一个
// 还可以写在参数里会更清楚一些
return new CDPlayer(sgtPeppers());
}
@Bean
public XXPlayer xxPlayer(CompactDisk disk) {
return new XXPlayer(disk);
}
}
使用xml装备
不推荐使用,但是有一些第三方库使用了xml创建bean,那么没有办法了。
混合配置
一些第三方库使用了XML可以使用JavaConfig导入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 {
}
网友评论