8.24打卡
今天学到了Spring的自动填充Bean,感觉比显示填充更有逼格- -
粗略作法如下
- 首先在创建的Bean上添加@Component注解
- 创建一个配置类,并给它添加@Configuration 和@ComponentScan 注解
- 创建配置类的junit测试,使用Junit的@Test进行测试
1. 首先创建Bean
CompactDisc接口
public interface CompactDisc {
void play();
}
一张CD(Bean):SgtPeppers
@Component
public class SgtPeppers implements CompactDisc {
private String title = "Sgt. Pepper's Lonely Hearts Club Band";
private String artist = "The Beatlea";
@Override
public void play() {
System.out.print("Playing " + title + " by " + artist + "\n");
}
}
MediaPlayer接口
public interface MediaPlayer {
void play();
}
CD播放器(Bean):用于播放SgtPeppers
@Component
public class CDPlayer implements MediaPlayer {
private CompactDisc cd;
// 表明当Spring创建CDPlayer bean的时候,会通过这个构造器来进行实例化 并且会传入一个可设置给CompactDisc类型的bean
@Autowired
public CDPlayer(CompactDisc cd){
this.cd = cd;
}
@Override
public void play() {
cd.play();
}
}
2. 创建配置类
// @Configuration 的注解类表示 这是一个配置类
@Configuration
// @ComponentScan 这个注解能够在Spring中启用组件扫描 ,在没有别的配置时会默认扫描与配置类相同的包-》soundsystem,在该包下查找带有@Component 注解的类
@ComponentScan
public class CDPlayerConfig {
}
3. Junit测试,是否成功自动装配Bean
@RunWith(SpringJUnit4ClassRunner.class)
// 以便自动创建Spring的应用上下文
@ContextConfiguration(classes = CDPlayerConfig.class)
// @ContextConfiguration 会告诉它需要在 CDPlayerConfig 中加载配置
public class CDPlayerConfigTest {
// @Rule 用于扩展Junit
@Rule
public final SystemOutRule log = new SystemOutRule().enableLog();//用于收集控制台输出,并用assert断言查看标准输出的差别
@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 Beatlea\n",
log.getLog());
}
}