知識庫 / Spring RSS 訂閱

Spring BeanFactory 指南

Spring
HongKong
2
02:44 PM · Dec 06 ,2025

1. 簡介

本文將重點介紹 Spring BeanFactory API 的探索。

BeanFactory 接口提供了一種簡單而靈活的配置機制,用於通過 Spring IoC 容器管理各種類型的對象。 在深入瞭解此核心 Spring API 之前,讓我們先了解一些基本概念。

2. 基礎 – Bean 和容器

簡單來説,Bean 是 Spring 應用的主體,由 Spring IoC 容器管理。除了由容器管理之外,Bean 本身沒有任何特殊之處(在其他方面,它只是應用程序中眾多對象之一)。

Spring 容器負責實例化、配置和組裝 Bean。容器通過讀取我們為應用程序定義的配置元數據來獲取實例化、配置和管理對象的具體信息。

3. Maven 依賴

讓我們將所需的 Maven 依賴 添加到 <em >pom.xml </em > 文件中。 我們將使用 Spring Beans 依賴來設置 BeanFactory:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>

4. BeanFactory 接口

值得一提的是,首先可以查看 該接口的定義,位於 org.springframework.beans.factory 包中,並在此討論其一些重要的 API。

4.1. BeanFactory 的 getBean() API

BeanFactory 的 getBean() 方法返回指定 bean 的實例,該實例可能在應用程序中共享或獨立。

4.2. <em containsBean()</em> API

此方法確認該 Bean 容器是否包含名稱為指定名稱的 Bean。 換句話説,它確認 `getBean(java.lang.String) 方法是否能夠獲取名稱為指定名稱的 Bean 實例。

4.3. isSingleton() API

isSingleton() API 可用於查詢該 Bean 是否為共享單例。 也就是説,如果 <a href="https://docs.spring.io/spring/docs/5.0.x/javadoc-api/org/springframework/beans/factory/BeanFactory.html#getBean-java.lang.String-" target="_blank" rel="noopener noreferrer"><em>getBean(java.lang.String)</em></a> 始終返回相同的實例。

4.4. isPrototype() API

此 API 將確認 <a href="https://docs.spring.io/spring/docs/5.0.x/javadoc-api/org/springframework/beans/factory/BeanFactory.html#getBean-java.lang.String-" target="_blank" rel="noopener noreferrer"><em>getBean(java.lang.String)</em></a> 是否返回獨立的實例——無論 bean 是否配置為 prototype 作用域。

需要注意的是,此方法返回 <em>false</em> 並不能明確指示存在 singleton 對象。它表明存在非獨立的實例,這可能對應於其他作用域。需要使用 <a href="https://docs.spring.io/spring/docs/5.0.x/javadoc-api/org/springframework/beans/factory/BeanFactory.html#isSingleton-java.lang.String-" target="_blank" rel="noopener noreferrer"><em>isSingleton(java.lang.String)</em></a> 操作來明確檢查是否存在共享的 singleton 實例。

4.5. 其他 API

雖然 <em>isTypeMatch(String name, Class targetType)</em> 方法用於檢查具有給定名稱的 Bean 是否與指定類型匹配,`getType(String name) 則可用於識別具有給定名稱的 Bean 的類型。

最後,`getAliases(String name) 返回給定 Bean 名稱的別名(如果有)。

5. <em >BeanFactory</em> API

<em >BeanFactory</em> 負責存儲 Bean 定義並根據客户端應用程序的需求實例化它們,這意味着:

  • 它通過實例化 Bean 並調用適當的銷燬方法來管理 Bean 的生命週期。
  • 它在實例化 Bean 時能夠創建依賴對象之間的關聯。
  • 需要注意的是,<em >BeanFactory</em> 不支持基於註解的依賴注入,而 <em >ApplicationContext</em>,作為 <em >BeanFactory</em> 的超集,則支持。

請參閲 Application Context 以瞭解其更多功能。

6. 定義 Bean

讓我們定義一個簡單的 Bean:

public class Employee {
    private String name;
    private int age;
    
    // standard constructors, getters and setters
}

7. 使用 XML 配置 BeanFactory

我們可以使用 XML 配置 BeanFactory。 讓我們創建一個名為 bean factory-example.xml 的文件:

<bean id="employee" class="com.baeldung.beanfactory.Employee">
    <constructor-arg name="name" value="Hello! My name is Java"/>
    <constructor-arg name="age" value="18"/>
</bean>    
<alias name="employee" alias="empalias"/>

請注意,我們還為 員工 Bean 創建了一個別名。

8. 使用 BeanFactoryClassPathResource

ClassPathResource 屬於 org.springframework.core.io 包。 讓我們運行一個快速測試,並使用 ClassPathResource 初始化 XmlBeanFactory,如下所示:

public class BeanFactoryWithClassPathResourceTest {

    @Test
    public void createBeanFactoryAndCheckEmployeeBean() {
        Resource res = new ClassPathResource("beanfactory-example.xml");
        BeanFactory factory = new XmlBeanFactory(res);
        Employee emp = (Employee) factory.getBean("employee");

        assertTrue(factory.isSingleton("employee"));
        assertTrue(factory.getBean("employee") instanceof Employee);
        assertTrue(factory.isTypeMatch("employee", Employee.class));
        assertTrue(factory.getAliases("employee").length > 0);
    }
}

9. 結論

在本文中,我們學習了 Spring BeanFactory API 提供的一些主要方法,並提供了一個示例來演示配置及其用法。

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

發佈 評論

Some HTML is okay.