フリーランス チャレンジ!!

フリーランス チャレンジ!!

現役フリーランスエンジニアが書く雑記ブログ

【Spring Boot入門】DI(依存性の注入)とは? サンプルソースを使って深掘り

スポンサーリンク

スポンサーリンク

 前回は、Spring環境を作成し、"Hellow World"をコンソールに表示しました。

 

次は、DI(依存性の注入)について勉強していきます。

やはりネットの情報だけでは、分かりづらかったのですが本で体系的(順序立てて)に学ぶと理解が深まります。

 

今回も下記の本を参考にしてます。

 

 

DI(依存性の注入)とは?

依存性の注入と言われてもピンとこないです。

 

ソフトウェアのデザインパターン の1つで、「Inversion of Control Principle(制御の反転の原則)」を実現します。DIを用いることで、コンポーネントを構成するインスタンスの生成と依存関係の解決をソースコードから分離することができます。

※本からの引用

ネットの情報も参考にすると、

依存性とは、オブジェクトのこと

注入は使う側に渡すこと

です。

 

つまり、依存性の注入は、オブジェクトを使う側に渡すことです。

少し分かりやすくなりました。

 

SpringでDI(依存性の注入)することのメリットとは?

SpringによるDI(依存性の注入)はDIコンテナがその機能を提供します。

 

DIコンテナを経由してインスタンスを管理することにより、以下のようなメリットを享受できるようになります。

・インスタンスのスコープを制御できる

・インスタンスのライフサイクルを制御できる

・共通機能を組み込める

・コンポーネント間が疎結合になるため、単体テストがしやすくなる

※本からの引用

 

上記いろいろメリットがありますが「インスタンスのスコープを制御」について説明します。

 

スコープとは簡単に言うと見える範囲の事です。

例えば、singletonは一度DIコンテナからBeanのインスタンスを作成すると、その後はずっとそのインスタンスを利用します。

 

prototypeの場合は、Beanのインスタンスを作成する度に新しいインスタンスを作成します。

 

このようにsingleton、prototypeでインスタンス作成後の見え方が変わるのです。

 

このスコープ機能を自前で実装するには、ソースを書かなきゃいけないし、バグが発生する可能性もあるけど、Springを使う事で簡単にスコープの機能を使うことができます。

 

SpringでDIを使うには

SpringでDIを使うには、代表的な3つの方法があります。

・JavaベースConfiguration

・XMLベースConfiguration

・アノテーションベースConfiguration

 

言葉で説明するよりサンプルプログラムを見た方が早いので、サンプルプログラムで紹介します。

 

サンプルプログラム

それぞれのサンプルコードを紹介します。

 

JavaベースConfiguration

 Configuration定義

gist19ee17d15f5edc3ee34dba87c3a9dc5b

 

ポイントとしては6行目の"@Configuration"と10行目の"Bean"です。

ConfigurationアノテーションでDI対象となるように宣言し、DIコンテナに注入したいインスタンスはBeanアノテーションを付与します。

複数DIコンテナに注入したいのであれば、Beanアノテーションでクラスを定義すればOKです。

 

Bean定義

giste6fe8a69ddd363db4c116bd73b9e08f0

 

 

XMLベースConfiguration

 applicationContext.xml

gist864230bf13d50e343d0eb6d9c603630e

 

11行目でDIコンテナに注入させたいパッケージを設定してます。

この指定したパッケージ配下で"@Component"や"@Service"、"@Controller"などのアノテーションをスキャンしてDIコンテナに注入します。 

 

Bean定義

gist62ae54b89c6bb3c311e1f85522c5163a

 

アノテーションベースConfiguration

Bean定義 

gist62ae54b89c6bb3c311e1f85522c5163a

 

サンプル実行ソース

gist147443987be6ddeaae89dff88a8283a7

 

サンプル実行

f:id:ksakae1216:20181213224642p:plain

このプログラムを実行すると、コンソールにメッセージを表示します。(赤ワク部分)
 

最後に

このシンプルなサンプルを理解できれば、SpringでのDIのやり方はそんなに難しくないと思えるはずです。

 

また、サンプルでは「JavaベースConfiguration」、「XMLベースConfiguration」、

「アノテーションベースConfiguration」の3パターン用意しました。

 

複数人で開発を想定すると修正が競合する「JavaベースConfiguration」、「XMLベースConfiguration」はオススメできません。

「アノテーションベースConfiguration」が同じファイルを修正するケースもなく、記述量も少ないのでこちらがオススメです。

 

Gitに登録するのでぜひ、クローンしてローカルで動かしてみて下さい。

github.com

 

Gitからクローンしてeclipseにインポートするなら下記を参照ください。

www.ksakae1216.com