1. 概要

Beanは、SpringFrameworkの重要な概念です。 したがって、この概念を理解することは、フレームワークのコツをつかみ、それを効果的な方法で使用するために重要です。

残念ながら、 Springbeanが実際に何であるかという単純な質問に対する明確な答えはありません。 。

このチュートリアルでは、公式ドキュメントの説明から始めて、トピックに光を当てようとします。

2. Beanの定義

SpringフレームワークドキュメントでのBeanの定義は次のとおりです。

Springでは、アプリケーションのバックボーンを形成し、SpringIoCコンテナーによって管理されるオブジェクトはBeanと呼ばれます。 Beanは、Spring IoCコンテナによってインスタンス化、アセンブル、またはその他の方法で管理されるオブジェクトです。

この定義は簡潔で要点に到達していますが、重要な要素であるSpringIoCコンテナについて詳しく説明していません。それが何であるかとそれがもたらす利点を詳しく見てみましょう。

3. 制御の反転

簡単に言えば、 I 制御の反転(IoC)は、オブジェクトが依存関係を作成せずに定義するプロセスです。このオブジェクトは、そのような構築の仕事を委任しますIoCコンテナへの依存関係。

IoCに飛び込む前に、いくつかのドメインクラスの宣言から始めましょう。

3.1. ドメインクラス

クラス宣言があると仮定します。

public class Company {
    private Address address;

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

    // getter, setter and other properties
}

このクラスには、タイプAddressのコラボレーターが必要です。

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構成

まず、Companyクラスを@Componentアノテーションで装飾しましょう。

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

beanメタデータをIoCコンテナに提供する構成クラスは次のとおりです。

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

構成クラスは、タイプAddressのBeanを生成します。 また、 @ComponentScan アノテーションが付けられており、Companyクラスを含むパッケージ内のBeanを検索するようにコンテナーに指示します。

Spring IoCコンテナーがこれらのタイプのオブジェクトを構築する場合、それらはIoCコンテナーによって管理されるため、すべてのオブジェクトはSpringBeanと呼ばれます。

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. 結論

この記事では、SpringBeanとIoCコンテナーとの関係について簡単に説明しました。

完全なソースコードは、GitHubにあります。