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

eclipse

 前回は、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

    コメント

    タイトルとURLをコピーしました