##この記事の目的
DI:Dependency Injection(依存性注入)ってなに?
の続き
SpringがどのようにDIを実現しているかの解説
##今回の記事の範囲
Spring内でのDIの概略の説明
##DIの復習
- DIを利用する理由 … クラス間の依存性を減らして再利用性/テストしやすさを上げたい
- どうやって実現する … あるクラスで使用したいクラスをinterfaceの型で渡す → 実際に渡すクラスは別に定義する。
##登場人物
- 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();
}
}
概念さえ飲み込めば割と理解しやすいと思います。
##次回予告
実際に試用する際の仕様などの解説を予定しています。