1概要

BeanはSpring Frameworkの重要な概念です。そのため、この概念を理解することは、フレームワークを理解して効果的に使用するために非常に重要です。

残念ながら、

Spring beanが実際には何なのかという単純な質問に対する明確な答えはありません。

いくつかの説明は、全体像が見落とされるほど低いレベルになっています。

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


2 Beanの定義


Spring Frameworkのドキュメント

でのBeanの定義は次のとおりです。

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

この定義は簡潔で要点を述べていますが、** Spring IoCコンテナという重要なことを見逃しています。


3制御の反転

簡単に言えば、https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring[I]

https://www.baeldung.com/inversion-control-and-dependency-injection-in

-spring[nversion of Control]、または略して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を生成します。また、

Company

クラスを含むパッケージ内のBeanを探すようにコンテナに指示する

@ ComponentScan

アノテーションも保持します。

Spring IoCコンテナがこれらの型のオブジェクトを構築するとき、それらはIoCコンテナによって管理されるので、すべてのオブジェクトはSpring Beanと呼ばれます。


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コンテナとの関係について簡単に説明しました。

このチュートリアルの完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/spring-core[over on GitHub]にあります。