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

Spring Java Config 實戰:使用 @Bean 註解顯式裝配 Bean 替代組件掃描

     編輯:Java 綜合教學

為什麼需要 Java 代碼顯式配置 Bean?

在前文中介紹了 Spring 隱式創建 Bean 的方式(@Component + @Autowired + 組件掃描)。但當引入第三方類庫時,無法在其源碼上添加註解,自動裝配便失效。此時需使用 Java 代碼顯式實現 Bean 的定義與裝配。

案例背景:CD 播放器系統

沿用 CD 播放器例子,包含兩個介面:MediaPlayer / CompactDisc,以及多種實現類:

  • MediaPlayer 實現:CDPlayer
  • CompactDisc 實現:CompactDisc_guangliang、CompactDisc_wangfei、CompactDisc_zhoujielun、CompactDisc_xusong

多實現類的設計是為了驗證 Spring 單例 Bean 的特性:每個 Bean 定義在容器中只會創建一個對象實例。

業務類代碼(移除註解)

package com.spring.javabeans.cd;

import org.springframework.beans.factory.annotation.Autowired;

public class CDPlayer implements MediaPlayer {
    private CompactDisc cd;

    @Autowired // 構造器注入
    public CDPlayer(CompactDisc cd) {
        this.cd = cd;
    }

    @Override
    public void player() {
        System.out.println("使用 CD 播放!");
    }
}
package com.spring.javabeans.cd;

public class CompactDisc_guangliang implements CompactDisc {
    private String title = "童話";
    private String artist = "光良";

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


Java 配置類:@Bean 註解詳解

通過 @Configuration 標註的配置類中,使用 @Bean 註解聲明 Bean 定義:

package com.spring.javabeans.cd;

import org.springframework.context.annotation.Bean;

public class CDPlayerConfig {

    @Bean
    public CompactDisc randomBeatlesCD() {
        int key = (int) Math.floor(Math.random() * 4);
        if (key == 0) return new CompactDisc_zhoujielun();
        else if (key == 1) return new CompactDisc_xusong();
        else if (key == 2) return new CompactDisc_guangliang();
        else return new CompactDisc_wangfei();
    }

    @Bean
    public CDPlayer cdplayer(CompactDisc cd) {
        return new CDPlayer(cd);
    }
}

關鍵點解析

  • @Bean 告訴 Spring:此方法返回的對象應註冊為 Bean
  • 方法名即為 Bean 的 ID(如 randomBeatlesCD、cdplayer)
  • cdplayer 方法參數 CompactDisc cd 會自動從容器中尋找匹配的 Bean 注入
  • 邏輯控制:隨機選擇一張 CD,展示了 Java 配置的靈活性

JUnit 整合測試

package com.spring.javabeans.cd;

import static org.junit.Assert.*;
import org.junit.runner.RunWith;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfig.class)
public class CDTest {

    @Autowired
    private MediaPlayer player;

    @Autowired
    private CompactDisc cd;

    @Test
    public void test1() {
        assertNotNull(player);
        assertNotNull(cd);
    }

    @Test
    public void test2() {
        player.player();
        cd.play();
    }
}

測試配置說明

  • @RunWith(SpringJUnit4ClassRunner.class):啟用 Spring 測試支持
  • @ContextConfiguration(classes=CDPlayerConfig.class):指定配置類
  • @Autowired:依賴注入,驗證 Bean 是否正確裝配

總結

Java Config 方式(@Configuration + @Bean)提供了類型安全、重構友善、邏輯可控的 Bean 定義方式,特別適合第三方庫整合、複雜條件裝配等場景。它是現代 Spring 應用開發的推薦配置方式。

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