Spring実戦——手動組立bean
クラスが外部から導入されたクラスの場合、クラスに@Componentの表示を追加するのは難しいので、スキャン表示でスキャンすることはできません。
CDの抽象類と実現類のAvrilCDは、@Componentの表示がありません。
true Avril CD
CDの抽象類と実現類のAvrilCDは、@Componentの表示がありません。
public interface CD {
void play();
}
public class AvrilCD implements CD {
public void play() {
System.out.println("AvrilCD");
}
}
MediaPlayer抽象類と実現類CDPlayer、Another CDPlayer public interface MediaPlayer {
void playCD();
}
//@Component
public class CDPlayer implements MediaPlayer {
public CD cd;
//@Autowired//
public CDPlayer(CD cd) {
this.cd = cd;
}
public void playCD(){
cd.play();
}
}
public class AnotherCDPlayer implements MediaPlayer {
public CD cd;
public AnotherCDPlayer(CD cd) {
this.cd = cd;
}
public void playCD(){
cd.play();
}
}
クラスの設定/**
* , @Component , ,
*/
@Configuration//
public class CDPlayerConfig {
@Bean
public CD avrilCD(){
return new AvrilCD();
}
@Bean
public MediaPlayer cdPlayer(){
return new CDPlayer(avrilCD());
}
@Bean
public MediaPlayer anotherCDPlayer(){
return new AnotherCDPlayer(avrilCD());
}
}
テスト@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class CDPlayerTest {
@Autowired//Autowired bean, AvrilCD
private CD cd;
@Autowired
private AnotherCDPlayer acdp;
@Autowired
private CDPlayer cdp;
//@Autowired
//private MediaPlayer mp;// , CDPlayer AnotherCDPlayer MediaPlayer,
@Test
public void cdShouldNotBeNull(){
assertNotNull(cd);
System.out.println(acdp.cd == cdp.cd);// CD, new ,
// ,Spring bean
cd.play();
}
}
結果:true Avril CD