首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring 隱式 Bean 發現與自動裝配機制深度解析

     編輯:Java 綜合教學

Spring 隱式 Bean 發現與自動裝配機制深度解析

Spring 提供組件掃描與自動裝配機制,大幅減少 XML 設定。本文透過「播放器/光碟」領域模型,完整示範 @Component、@Autowired、@ComponentScan、@Configuration 協同運作。

領域模型設計

  • 介面:MediaPlayer、CompactDisc
  • 實作:CDPlayer 實作 MediaPlayer,CompactDisc_zhoujielun 實作 CompactDisc

CDPlayer:自動裝配建構子注入

@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 播放!");
    }
}

CompactDisc 實作:具名 Bean

@Component("ZhouJieLun") // 指定 Bean 名稱
public class CompactDisc_zhoujielun implements CompactDisc {
    private String title = "髮如雪";
    private String artist = "周杰倫";

    @Override
    public void play() {
        System.out.println("播放:" + title + " 來自藝術家:" + artist);
    }
}

啟用組件掃描:Java Config 方式

@Configuration
@ComponentScan("com.spring.cd") // 掃描基礎套件
public class CDPlayerConfig {
    // 無需額外程式碼,註解驅動裝配
}

JUnit 4 整合測試

@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 方法使用

進階提示

  • 單一 Bean 多實作:若有多個 CompactDisc 實作,需用 @Qualifier 或 @Primary 消除歧義。
  • @ComponentScan 可排除特定套件:excludeFilters。
  • 建構子注入(如範例)優於 欄位注入:不可變性、易測試、循環依賴檢測。

總結

隱式 Bean 發現與自動裝配是 Spring 現代化配置的基石。掌握掃描範圍控制、注入點選擇、歧義消解三大核心技巧,即能構建清晰、可維護的 Spring 應用上下文。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved