Spring 提供組件掃描與自動裝配機制,大幅減少 XML 設定。本文透過「播放器/光碟」領域模型,完整示範 @Component、@Autowired、@ComponentScan、@Configuration 協同運作。
MediaPlayer、CompactDiscCDPlayer 實作 MediaPlayer,CompactDisc_zhoujielun 實作 CompactDisc@Component
public class CDPlayer implements MediaPlayer {
private CompactDisc cd;
@Autowired // 建構子注入,Spring 自動滿足依賴
public CDPlayer(CompactDisc cd) {
this.cd = cd;
}
@Override
public void player() {
System.out.println("我用 CD 播放!");
}
}
@Component("ZhouJieLun") // 指定 Bean 名稱
public class CompactDisc_zhoujielun implements CompactDisc {
private String title = "髮如雪";
private String artist = "周杰倫";
@Override
public void play() {
System.out.println("播放:" + title + " 來自藝術家:" + artist);
}
}
@Configuration
@ComponentScan("com.spring.cd") // 掃描基礎套件
public class CDPlayerConfig {
// 無需額外程式碼,註解驅動裝配
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfig.class)
public class CDPlayerTest {
@Autowired
private CompactDisc cd;
@Autowired
private MediaPlayer player;
@Test
public void test() {
player.player(); // 輸出:我用 CD 播放!
cd.play(); // 輸出:播放:髮如雪 來自藝術家:周杰倫
assertNotNull(cd);
assertNotNull(player);
}
}
| 註解 | 作用 | 關鍵屬性 |
|---|---|---|
@Component | 標記類為 Spring Bean,掃描時自動註冊 | value 指定 Bean 名稱 |
@ComponentScan | 啟用組件掃描,指定基礎套件 | basePackages、basePackageClasses |
@Autowired | 依賴注入(建構子、Setter、欄位) | required(預設 true) |
@Configuration | 標記配置類,等同 XML <beans> | 搭配 @Bean 方法使用 |
CompactDisc 實作,需用 @Qualifier 或 @Primary 消除歧義。@ComponentScan 可排除特定套件:excludeFilters。隱式 Bean 發現與自動裝配是 Spring 現代化配置的基石。掌握掃描範圍控制、注入點選擇、歧義消解三大核心技巧,即能構建清晰、可維護的 Spring 應用上下文。