依存性注入(DI)は、Springフレームワークで一躍有名になりました。
依存性注入とは・・・ざっくり言うと
- 後からロジックを自由に差し替える(注入)ことができる
ふつうはノーマルタイヤを履いておき、雪が降ったらスタッドレスタイヤに履き替える・・・ようなものです。
プログラム内にて、依存性を注入してみる
まずは、実際にどのように依存性を注入するか理解するために、プログラム内で注入をしてみます。
上で書いたように、タイヤの履き替えをしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public interface Tire { public String getObjective(); } public class NormalTire implements Tire { @Override public String getObjective() { return "春~秋"; } } public class StudlessTire implements Tire { @Override public String getObjective() { return "冬"; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | public class Car { private Tire tire = null; public Car(Tire tire) { this.tire = tire; } public void doWork() { System.out.println(tire.getObjective() + "用のタイヤで走行中..."); } public static void main(String[] args) { Tire tire = null; Car car = null; //春になったので、ふつうのタイヤを履いて走行する tire = new NormalTire(); car = new Car(tire); car.doWork(); //冬になったので、スタッドレスタイヤを履いて走行する tire = new StudlessTire(); car = new Car(tire); car.doWork(); } } |
実行結果
見るまでもないかもしれませんが、実行結果はこちら。
1 2 | 春~秋用のタイヤで走行中... 冬用のタイヤで走行中... |
まとめ
プログラム内でタイヤを履き替えをしてみました。
この例では、季節に応じて、mainメソッドを改変することで、タイヤを後から自由に履きかえることができます。
しかし、プログラムの改修は必要です(; ・`д・´)
・・・とは言え、タイヤの履き替えもプログラムを都度書き換えるのは大変ですし、リリース後はなかなかできないこともあります。
そこで、これを一歩進めて、プログラム以外の定義ファイル等に依存関係を書くようにします。
必要に応じて、定義ファイルを書き換えることでロジックを切り替えます。
Springフレームワークに代表されるDIコンテナでは、プログラム実行時に、フレームワークが定義を参照。自動でロジックを注入することができます。