作成: 更新:

Dependency Injectionとは

didiコンテナjavaspringspringbootspringmvcspringframework

はるか昔に触ったSpring bootの話題の時に
ふいに出たDIの話がまさかの抜け落ちていたため危機感を感じ改めて自分用に整理

Dependency Injection is 何?

  • オブジェクトに対して、オブジェクトを注入すること(=依存性の注入)

参考:DIの実装例

メリデメ

DI前.java DI後.java
FileLoggerが実装出来るまで、AServiceが実装出来ない FileLoggerがなくてもAServiceの実装を進められる
FileLoggerからDatabaseLoggerに変える場合、AServiceを修正する必要がある AServiceの呼び出し元を変えるだけでOK
AServiceのdoSomethingのテストの度に、ファイルにログが吐かれる MockLoggerを渡すことで、ファイルにログを吐かなくできる

Dependency Injection is いつ?

実装クラスと別の責務の処理が発生しているとき

※特に読み込み・書き込みが発生する箇所

  • 例:ロジッククラスでDIするといい場面例
    • SNSの一覧取得・投稿
    • 設定ファイルの取得・書き込み
    • DBへの接続
    • ログの書き込み・取得
    • 3rdAPIへの接続

DI進めるうえでの弊害

DIしたいインスタンスが多くなる(=コンストラクタの引数が増える)
引数が増える→複数個所で被DI対象が使われていれば修正箇所が増大する

DIコンテナ is 何?

参考記事