5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

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

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

5
5
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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?