package zhl.soundsystem;
public interface MediaPlayer {
void play();
}
package zhl.soundsystem;
import org.springframework.beans.factory.annotation.Autowired;
public class CDPlayer implements MediaPlayer {
private CompactDisc cd;
public CDPlayer(CompactDisc cd) {
this.cd = cd;
}
public void play() {
cd.play();
}
}
package zhl.soundsystem;
public interface CompactDisc {
void play();
}
package zhl.soundsystem;
public class SgtPeppers implements CompactDisc {
public void play() {
System.out.println("Playing SgtPeppers play");
}
}
package zhl.soundsystem;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "zhl.soundsystem")
public class CDPlayerConfig {
@Bean
public CompactDisc compactDisc() {
return new SgtPeppers();
}
@Bean
public CDPlayer cdPlayer(CompactDisc compactDisc) {
return new CDPlayer(compactDisc);
}
}
package zhl.soundsystem;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class App
{
public static void main( String[] args )
{
AnnotationConfigApplicationContext tx = new AnnotationConfigApplicationContext(CDPlayerConfig.class);
CDPlayer cdPlayer = (CDPlayer)tx.getBean(CDPlayer.class);
if(cdPlayer != null) {
cdPlayer.play();
}
else {
System.out.println("cdPlayer is null");
}
tx.close();
}
}
参考Spring实战第四版,使用Java代码配置bean,这种方法也比较灵活方便,在使用第三方库的时候,如果无法对第三方库进行修改,可以很方便的使用此方法进行bean的配置
getNameType 默认是@Bean对应的函数名,可以@Bean(“xxxName”)进行设置