SlideShare a Scribd company logo
Spring勉強会
1-2 DI
DI(依存性の注入)とは
• Dependency Injection の頭文字を取って、
DIという。
• コンポーネント間の依存関係をプログラムの
ソースコードから排除し、外部の設定ファイル
などで注入できるようにするソフトウェアパ
ターンである。
コレによって、クラス間の関係が疎結合となり、
依存関係が弱まる。
依存性が高いと何がいけないのか
• 外から動的に動作を変更できないので、テス
トしづらい
• 柔軟性がなくカスタマイズしにくい
• クラス間の結びつきが強すぎると、依存する
クラスを変更した場合にコードの修正が広範
囲におよぶ可能性が生じる。
メリット
• 単体テストの効率化
• ソフトウエアの階層をきれいに分離した設計
が容易になる
• 依存性が極小になるため、変化に強いソフト
ウエアを作りやすくなる
単体テストの効率化
• DIフレームワークでは、他クラスへの依存は
インターフェイスを介したものなる。
インターフェースを介す為、呼び出す側は実
装クラスの完成を待つ必要がない。
DIを用いることで、単体テストにおいて簡単に
依存性をテスト用のクラス(モックオブジェクト
等)に差し替えることができる。
⇒テストが容易になり、「テスト・ファースト」に
よる開発スタイルをとりやすくなる
どんなインジェクションがあるのか
• コンストラクタインジェクション
• セッターインジェクション
コンストラクタ・インジェクション
• コンストラクタ経由で依存性注入をう。
• <constructor-arg>タグを利用します
(呼び出し対象コンストラクタ)
public TestClass(String strValue, int intValue) {
...
(Bean定義記述例)
<bean id="testClass" class="com.omotenashimind.labo.TestClass“
scope="prototype" >
<constructor-arg name="strValue" value="test" />
<constructor-arg name="intValue" value="5" />
</bean>
セッター・インジェクションセッター・インジェクションセッター・インジェクションセッター・インジェクション
• setterメソッド経由で依存性注入を行なう。
• <property>タグを利用する。
(呼び出し対象セッター・メソッド)
public void setStrValue(String strValue) {
(Bean定義記述例)
<bean id=“testClass” class=“com.omotenashimind.labo.TestClass” >
<property name="strValue" value="test" />
</bean>
オブジェクト参照のオブジェクト参照のオブジェクト参照のオブジェクト参照の設定設定設定設定
(オブジェクト参照設定例)
<bean id="beanHogehoge" class=“test.HogeHoge" />
<bean id="testClass" class="com.omotenashimind.labo.TestClass">
<property name="strValue" ref="beanHogehoge" />
</bean>
• ref属性属性属性属性を指定し、Beanコンテナ内に登録さ
れているBeanのIDを指定することで、その
Beanオブジェクトの参照を設定することがで
きる
リスト型の値の設定リスト型の値の設定リスト型の値の設定リスト型の値の設定
(リスト型の値をインジェクションする例)
<bean id="testClass" class="com.omotenashimind.labo.TestClass">
<property name="valueList">
<list>
<value>value 1.</value>
<value>value 2.</value>
<value>value 3.</value>
</list>
</property>
</bean>
マップ型の値の設定マップ型の値の設定マップ型の値の設定マップ型の値の設定
(リスト型の値をインジェクションする例)
<bean id="testClass" class="com.omotenashimind.labo.TestClass">
<property name="valueMap">
<map>
<entry key="key1" value="value1" />
<entry key="key2" value="value2" />
<entry key="key3" value="value3" />
</map>
</property>
</bean>

More Related Content

Viewers also liked

Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)
Misaki Kajiura
 
システムアーキテクト~My batis編~
システムアーキテクト~My batis編~システムアーキテクト~My batis編~
システムアーキテクト~My batis編~
Shinichi Kozake
 
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsugSpring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsugToshiaki Maki
 
スキトラ Spring + mybatis
スキトラ Spring + mybatisスキトラ Spring + mybatis
スキトラ Spring + mybatis
小川 昌吾
 
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Toshiaki Maki
 
JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法
Chihiro Ito
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版
MOCKS | Yuta Morishige
 

Viewers also liked (7)

Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)
 
システムアーキテクト~My batis編~
システムアーキテクト~My batis編~システムアーキテクト~My batis編~
システムアーキテクト~My batis編~
 
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsugSpring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
 
スキトラ Spring + mybatis
スキトラ Spring + mybatisスキトラ Spring + mybatis
スキトラ Spring + mybatis
 
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
 
JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版
 

More from gaaupp

Spring勉強会2
Spring勉強会2Spring勉強会2
Spring勉強会2
gaaupp
 
a
aa
勉強会場所候補
勉強会場所候補勉強会場所候補
勉強会場所候補
gaaupp
 
デザインパターン問題
デザインパターン問題デザインパターン問題
デザインパターン問題
gaaupp
 
第2回デザインパターン資料
第2回デザインパターン資料第2回デザインパターン資料
第2回デザインパターン資料gaaupp
 
デザインパターン
デザインパターンデザインパターン
デザインパターン
gaaupp
 

More from gaaupp (6)

Spring勉強会2
Spring勉強会2Spring勉強会2
Spring勉強会2
 
a
aa
a
 
勉強会場所候補
勉強会場所候補勉強会場所候補
勉強会場所候補
 
デザインパターン問題
デザインパターン問題デザインパターン問題
デザインパターン問題
 
第2回デザインパターン資料
第2回デザインパターン資料第2回デザインパターン資料
第2回デザインパターン資料
 
デザインパターン
デザインパターンデザインパターン
デザインパターン
 

Spring勉強会