2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SpringフレームワークにおけるBean定義の使い分け

Posted at

1. はじめに

Springフレームワークを用いたアプリケーション開発をする中で、Bean定義の使い分けがわからずに調べた内容を記事としてまとめます。

1. 3種類のBean定義

Springにおいて、Bean(ビーン)の定義はアプリケーションのコンポーネントをSpringのDIコンテナに登録する手段です。Beanの定義には3つの方法があります。

1.1 アノテーションベースのBean定義

使用場面: 自動検出によってBeanをスキャンしてコンテナに登録する場合。
特徴: @ComponentScanアノテーションを使用し、特定のパッケージ以下のコンポーネントをスキャンしてBeanとして定義される。

@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    // 何も定義しなくても、スキャンされたコンポーネントが自動的にBeanとして登録される。
}

1.2 JavaベースのBean定義

  • 使用場面: Java構成クラスを使用してBeanを定義する場合。
  • 特徴: @Configurationアノテーションが付いたJavaクラス内で@Beanアノテーションを使用して定義される。
@Configuration
public class AppConfig {
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

1.3 xmlベースのBean定義

  • 使用場面: 伝統的なアプローチで、設定を外部のXMLファイルに定義する場合。
  • 特徴: XMLファイルにBeanの設定が書かれる。コンテナの設定ファイル(通常はapplicationContext.xml)で定義される。
<bean id="myBean" class="com.example.MyBean">
    <property name="property1" value="value1" />
</bean>

2. Bean定義の使い分け

まず、アノテーションベースとJavaベースを比較します。
アノテーションベースの長所は大量のBean定義が簡潔にできることです。各Implクラスにアノテーションを付けるだけなので、開発者の負担は大きくありません。短所としては、開発者が作成したクラスにしか使えないことです。例えば、データベース接続を管理するDataSourceインターフェースのImplクラスはライブラリを活用しますが、ライブラリのソースコードを改変することはできないため、アノテーションをつけられません。
対して、Javaベースの長所は、このようなライブラリが提供するImplクラスでもBean定義できることです。ライブラリのImplクラスをコンストラクタとして呼び出し、戻り値で返せばBean定義することができます。短所は、大量に定義する負担が大きいことです。

このため、開発者が作成したImplクラスのBeanを定義する際はアノテーションベースの定義、ライブラリのクラスを定義する場合はJavaベースの定義を使えばよいとわかります。

最後に、xmlベースのBean定義ですが現在あまり使われていません。なぜならばxmlベースはJavaベースの下位互換であるためです。xmlベースの長所短所は上記のJavaベースのものと同じですが、xmlベースの場合は、クラス名を文字列で記述するため間違えの温床となるためです。

3.おわりに

Bean定義の使い分けを整理することができました。Springフレームワークの理解に貢献できたら幸いです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?