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());
}
}
最終結果
image.png