1、包含文件:2个接口,2个对应接口的实现类,1个开启组件扫描的类(默认组件扫描是不开启的,必须显式配置,从而命令它去寻找带有@Component注解的类,并为其创建bean。@ComponentScan默认会扫描与配置类相同的包,及其这个包一下的子包)。1个测试类。
2、相关代码依次为:
package soundsystem;
/**
* Created by cxh on 17/7/15.
* 音响系统:Compact disc
*/
public interface CompactDisc {
void play();
CompactDisc sgtPeppers();
}
package soundsystem;
/**
* Created by cxh on 17/7/16.
*/
public interface MediaPlayer {
void play();
CompactDisc getMusicResource();
}
package soundsystem;
import org.springframework.stereotype.Component;
/**
* Created by cxh on 17/7/15.
*/
@Component
public class SgtPeppers implements CompactDisc {
private String title="Sgt. Pepper`s Lonely Hearts Club Band";
private String artist="The Beatles";
public void play(){
System.out.println("Playing "+title+" by "+artist);
}
public CompactDisc sgtPeppers(){
return new SgtPeppers();
}
}
package soundsystem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* Created by cxh on 17/7/16.
*/
@Component
public class CDPlayer implements MediaPlayer {
// 定义一个音乐资源,这里通过@Autowired来声明需要注入CompactDisc的依赖
@Autowired
private CompactDisc cd;
public void play(){
cd.play();
}
public CompactDisc getMusicResource(){
return cd;
}
}
package soundsystem;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* Created by cxh on 17/7/15.
* 显示开启spring组件扫描
*/
@Configuration
@ComponentScan
public class CDPlayerConfig {
}
package soundsystem;
import org.junit.Rule;
import org.junit.Test;
import org.junit.contrib.java.lang.system.StandardOutputStreamLog;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* Created by cxh on 17/7/15.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfig.class)
public class CDPlayerTest {
@Rule
public final StandardOutputStreamLog log=new StandardOutputStreamLog();
@Autowired
private MediaPlayer player;
@Autowired
private CompactDisc cd;
@Test
public void cdShouldNotBeNull(){
assertNotNull(cd);
}
@Test
public void play(){
player.play();
assertEquals("Playing Sgt. Pepper`s Lonely Hearts Club Band"+
" by The Beatles\n",
log.getLog());
}
}
3、测试结果: