知識庫 / Spring RSS 訂閱

Spring Bean 簡介

Spring
HongKong
5
01:38 PM · Dec 06 ,2025

1. 概述

Bean 是 Spring 框架中的一個關鍵概念。因此,理解這個概念對於掌握框架並以有效的方式使用它至關重要。

不幸的是,對於“Spring Bean 到底是什麼”這個簡單問題,並沒有明確的答案。一些解釋過於深入,導致忽略了整體框架,而另一些則過於模糊。

本教程將嘗試闡明這個問題,首先從官方文檔中的描述入手。

2. Bean 定義

Spring 框架文檔 中,Bean 的定義如下:

在 Spring 中,由 Spring IoC 容器管理並構成了應用程序核心的對象被稱為 Bean。Bean 是指由 Spring IoC 容器實例化、組裝以及其他方式管理的對象。

這個定義簡潔明瞭 但未能詳細闡述一個重要的組成部分:Spring IoC 容器。 讓我們更深入地瞭解它以及它為應用程序帶來的好處。

3. 控制反轉

簡單來説,控制反轉 (IoC) 是一種 過程,其中對象定義其依賴項,而無需創建它們。 這種對象將創建這些依賴項的任務委託給 IoC 容器。

我們先聲明一些領域類,然後再深入瞭解控制反轉。

3.1 領域類

假設我們有一個類聲明:

public class Company {
    private Address address;

    public Company(Address address) {
        this.address = address;
    }

    // getter, setter and other properties
}

這個類需要一個類型為<em>Address</em>的協作對象:

public class Address {
    private String street;
    private int number;

    public Address(String street, int number) {
        this.street = street;
        this.number = number;
    }

    // getters and setters
}

3.2. 傳統方法

通常,我們使用類構造函數創建對象:

Address address = new Address("High Street", 1000);
Company company = new Company(address);

這種方法沒有問題,但如果能夠更好地管理依賴關係會怎麼樣呢?

想象一下,一個應用程序包含數十甚至數百個類。有時我們希望在整個應用程序中共享一個類的單個實例,有時則需要為每個用例創建一個單獨的對象,等等。

管理如此多的對象簡直是一場噩夢。這正是控制反轉發揮作用的地方。

與其自己構造依賴關係,一個對象可以從 IoC 容器中檢索其依賴關係。我們只需要為容器提供適當的配置元數據。

3.3. Bean 配置

首先,讓我們使用 @Component 註解裝飾 Company 類:

@Component
public class Company {
    // this body is the same as before
}

以下是一個配置類,它向 IoC 容器提供 Bean 級聯信息:

@Configuration
@ComponentScan(basePackageClasses = Company.class)
public class Config {
    @Bean
    public Address getAddress() {
        return new Address("High Street", 1000);
    }
}

配置類產生一個類型為<em>Address</em>的 Bean。它還攜帶了<em>@ComponentScan</em>註解,指示容器在包含<em>Company</em>類的包中查找 Bean。

當 Spring IoC 容器構造這些類型的對象時,所有對象都被稱為 Spring Bean,因為它們由 IoC 容器進行管理。

3.4. 在行動中使用 IoC

由於我們已經在配置類中定義了 Bean,我們需要一個 AnnotationConfigApplicationContext 類的實例來構建容器

ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);

一個快速測試驗證了我們的 Bean 的存在以及屬性值。

Company company = context.getBean("company", Company.class);
assertEquals("High Street", company.getAddress().getStreet());
assertEquals(1000, company.getAddress().getNumber());

結果證明 IoC 容器已正確創建和初始化了 Bean。

4. 結論

本文對 Spring Bean 以及它們與 IoC 容器的關係進行了簡要描述。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.