LoginSignup
5

More than 5 years have passed since last update.

SpringのDIについて①

Posted at

この記事の目的

DI:Dependency Injection(依存性注入)ってなに?
の続き
SpringがどのようにDIを実現しているかの解説

今回の記事の範囲

Spring内でのDIの概略の説明

DIの復習

  • DIを利用する理由 … クラス間の依存性を減らして再利用性/テストしやすさを上げたい
  • どうやって実現する … あるクラスで使用したいクラスをinterfaceの型で渡す → 実際に渡すクラスは別に定義する。

DI概略.jpg

登場人物

  • Bean…インジェクションするクラス
  • Bean定義…Beanをインジェクションする際にBeanに設定する各種プロパティ
  • Bean定義ファイル/Configuration…Bean定義をまとめたもの(Javaのクラス、XMLファイル)
  • DIコンテナ…各種Beanをセットしておき、使用する際はここから相手に渡す

SpringにおけるDI実現の概略

 各クラスの詳しい動きなどは次回

ApplicationContext

  • JavaにおけるDI実現の中心人物
  • DIコンテナにあたる機能を有しているクラス
  • BeanFactoryクラスを拡張して作られたクラス
  • 対応するConfigurationなどによってさらに拡張したクラスがある
  • 一つのアプリケーションに対して複数のDIコンテナを生成することができる

Configuration

  • Bean定義ファイルにあたるもの
  • これをApplicationContextクラスに渡してやり、DIコンテナ内にBeanを生成する
  • 【Javaベース】【xmlベース】【アノテーションベース】の3つの方法がある
  • 3つ単独で使うこともできるが、アノテーションベースとそれ以外を組み合わせて使うことで設定が楽になる
  • この中にBean定義を記述する

Bean

  • 一般的なクラス、基本的には特別な記述はする必要はない
  • がアノテーションベースConfigurationの場合は別途アノテーションを記述する
  • Bean内部でBeanをインジェクションして入れ子にすることもできる

ex)HogeServiceのbeanをhogeConfigに初期化条件を記載し、ApplicationContextを経由してBeanを取得する(Javaベース)

CreateContext.java
ApplicationContext ctx = new AnnotationConfigApplicationContext(HogeConfig.class);
HogeService service = ctx.getBean(HogeService.class)
HogeConfig.java
@Configuration
public class HogeConfig {
    @Bean
    HogeService hogeService() {
        return new HogeService(); 
    }
}

概念図で表すと下記のような感じでしょうか
SpringにおけるDIの概要.jpg

概念さえ飲み込めば割と理解しやすいと思います。

次回予告

実際に試用する際の仕様などの解説を予定しています。

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
5