注目の書籍

好評発売中!

iOS/Android/Windowsプログラミング

1冊で3大スマホOSの
基礎とプログラミング テクニックがわかる!
サンプルアプリも用意

Cloud Days
必聴講座ご紹介

2月28日(火)
12時50分〜
スマホへの投資対効果を可視化〜クラウド時代を勝ち抜く企業戦略とは

エムオーテックス


2月28日(火)
14時30分〜
「ソーシャル・エンタープライズ」へようこそ

米国セールスフォース・ドットコム


2月29日(水)
17時〜
事例に学ぶ「標的型攻撃阻止」の処方箋

シマンテック ドット クラウド

ソフト開発

仕事に役立つプログラミング・キーワード

日経ソフトウエア

DIコンテナ
【Dependency Injection Container】

2006/07/13
出典:日経ソフトウエア 2006年7月号  131ページより
(記事は執筆時の情報に基づいており、現在では異なる場合があります)

 DIコンテナは,「DI(Dependency Injection:依存性の注入)」と呼ぶデザインパターンに基づいて作られたコンポーネント群を集中管理するためのソフトウエアです。

 DIは,コンポーネント(クラス)間の依存関係をソースコードから取り除くことで,プログラムの実行時までコンポーネント同士が依存関係を持たないようにするデザインパターンです。

 例えば,あるクラスAの中で別のクラスBのインスタンスを生成して利用しているとき,AはBに強く依存してしまっています。つまり,Bを別のクラスに差し替えたときなどにはAも変更しなければなりません。このような依存関係は,AとBを別の人が作っている場合などに特に困ります。

 こうした依存性をクラスから取り除くのがDIパターンです。Bへの依存性をAから排除するには,まずBの機能を抽象化したインタフェースIを定義し,Iを実装したクラスとしてBを作ります。

 Bのインスタンスを生成するコードはAから削除し,その代わりに「Iを実装したクラスのインスタンス」を外部から与えてもらう形にします。Bの利用を前提に書かれていたコードはすべてIの機能を利用するコードに書き換えます。これでBを利用するコードがAから完全に取り除かれます。

 実行時には誰かがBのインスタンスを生成してIにキャストし,Aに与えます。この操作が「依存性の注入」で,ここで初めてAがBに対して依存性を持つことになります。

 この「誰か」の役目を一手に引き受けるのがDIコンテナです。DIパターンを使って抽出した依存関係は「設定ファイル」として1カ所にまとめて記述できます。DIコンテナは,この設定ファイルに従い,インスタンス化や依存性の注入を処理します。代表的なDIコンテナであるSpring FrameworkやSeasar2は,設定ファイルをXML形式で記述します。

 DIを実現するコードは,Java標準のコンポーネント技術であるEJB(EnterpriseJavaBeans)に比べて圧倒的にシンプルです。このためDIコンテナをEJBコンテナとの対比で「軽量コンテナ」と呼ぶこともあります。また,EJBの次期版であるEJB 3.0ではDIコンテナの機能が導入される予定です。


この記事に対するfacebookコメント

nikkeibpITpro

読みましたか? 〜 未読記事をご紹介