1. 序章

この記事では、 Spring BeanFactoryAPIの探索に焦点を当てます。

BeanFactory インターフェースは、Spring IoCコンテナーを介してあらゆる性質のオブジェクトを管理するための、シンプルでありながら柔軟な構成メカニズムを提供します。 この中央のSpringAPIを深く掘り下げる前に、いくつかの基本を見てみましょう。

2. 基本–Beanとコンテナ

簡単に言うと、BeanはSpringアプリケーションのバックボーンを形成し、SpringIoCコンテナーによって管理されるJavaオブジェクトです。 コンテナによって管理されることを除いて、Beanについて特別なことは何もありません(他のすべての点で、Beanはアプリケーション内の多くのオブジェクトの1つです)。

Springコンテナーは、Beanのインスタンス化、構成、およびアセンブルを担当します。 コンテナーは、アプリケーション用に定義した構成メタデータを読み取ることにより、インスタンス化、構成、および管理するオブジェクトに関する情報を取得します。

3. Mavenの依存関係

必要なMaven依存関係pom.xmlファイルに追加しましょう。 SpringBeansの依存関係を使用して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. getBean() API

getBean()メソッドのさまざまなバージョンは、指定されたBeanのインスタンスを返します。このインスタンスは、アプリケーション全体で共有または独立している可能性があります。

4.2. containsBean() API

このメソッドは、このBeanファクトリに指定された名前のBeanが含まれているかどうかを確認します。 具体的には、 getBean(java.lang.String)が指定された名前のBeanインスタンスを取得できるかどうかを確認します。

4.3. isSingleton() API

isSingleton APIを使用して、このBeanが共有シングルトンであるかどうかを照会できます。 つまり、 getBean(java.lang.String)が常に同じインスタンスを返す場合です。

4.4. isPrototype() API

このAPIは、 getBean(java.lang.String)が独立したインスタンスを返すかどうかを確認します。つまり、プロトタイプスコープで構成されたBeanであるかどうかを確認します。

注意すべき重要なことは、 false を返すこのメソッドは、シングルトンオブジェクトを明確に示していないということです。 独立していないインスタンスを示し、他のスコープにも対応している可能性があります。

isSingleton(java.lang.String)操作を使用して、共有シングルトンインスタンスを明示的にチェックする必要があります。

4.5. その他のAPI

isTypeMatch(String name、Class targetType)メソッドは、指定された名前のBeanが指定されたタイプと一致するかどうかをチェックしますが、 getType(String name)はBeanのタイプを識別するのに役立ちます与えられた名前で。

最後に、 getAliases(String name)は、指定されたBean名(存在する場合)のエイリアスを返します。

5. BeanFactory API

BeanFactory は、Bean定義を保持し、クライアントアプリケーションから要求されるたびにそれらをインスタンス化します。つまり、次のことを意味します。

  • Beanをインスタンス化し、適切な破棄メソッドを呼び出すことで、Beanのライフサイクルを処理します。
  • 依存オブジェクトをインスタンス化しながら、それらの間に関連付けを作成することができます
  • BeanFactory はアノテーションベースの依存性注入をサポートしていませんが、BeanFactoryのスーパーセットであるApplicationContextはサポートしていることを指摘することが重要です。

アプリケーションコンテキストを読んで、追加で何ができるかを確認してください。

6. Beanの定義

単純なBeanを定義しましょう。

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

7. XMLを使用したBeanFactoryの構成

BeanFactoryをXMLで構成できます。 ファイルを作成しましょうbeanfactory-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が提供する主なメソッドと、構成とその使用法を説明する例について学びました。

これらの例を裏付けるコードはすべて、GitHub利用できます。