→Java関連
→S2AOP
→詳細設計
概要 †
- DIはinterfaceの変数に対してその実装を用途に応じて挿げ替えるような動作を指すことが多いようだ。(ただし例えばJBoss Seamのバイジェクションなどはクラスに対しても行えるので、interfaceに限る話ではない)
- Javaの@EJBアノテーションもDIの一種です→EJB関連
- DIとAOPがサーバ・コンポーネント技術を変える
- なぜCGIやサーブレットだけでは不十分で、DIコンテナやEJBコンテナが必要な局面があるのでしょうか。その理由としては、主に以下の点が挙げられます。
- リソース・プーリング
- データベース・アクセス
- トランザクション管理
- セキュリティ管理
- Dependency Injectionでは、コンテナ(フレームワーク)が提供するさまざまなサービスを利用する際に、「コンテナのサービスをコンポーネントから呼び出す」のではなく、「コンポーネントに対しコンテナがサービスを注入する」という方法を用いる。これにより、コンポーネントがさまざまなサービスやAPI、またはほかのコンポーネントに依存してしまうことを防ぐ技法だ。
JavaEEのCDI †
Seaser †
- Seasarでスタンドアロンアプリを作るとき
- 初期化で
SingletonS2ContainerFactory.init();
- DIしたいときは
hoge = (Hoge) SingletonS2Container.getComponent(Hoge.class);
- 終了で
SingletonS2ContainerFactory.destroy();
- もちろんHogeはdiconに設定書く。
- @ResourceはSeasarでインジェクション先となる変数であることを示すアノテーション。ただしSeasarではメンバをpublicにすれば@Resourceををつけなくてもインジェクションされる模様
Spring †
- Spring Frameworkで理解するDI 依存性の注入とは何か?
- DIという言葉のうち「Dependency(依存性)」という単語は、「オブジェクトが成立するために必要な要件」という意味を持っています。この要件とは、オブジェクトの持つ属性や関連するオブジェクトなどです。
- 「注入(Injection)」とは「外部からの設定(Configuration)」を意味しています。 設定ファイルやWebアプリケーションのデプロイメントディスクリプタ(web.xmlなど)での設定を「注入」と呼んでいる
- これらのことから「DI」という言葉を言い表すと「オブジェクトの成立要件に必要な情報を外部設定すること」となります。情報を外部に切り出すことで、たとえオブジェクトを利用する状況が変わったとしても、設定を変更するだけでそのオブジェクトを利用することができるようになります。つまり再利用性の高い「部品」としてオブジェクトを実装しやすくなるのです。このような再利用性の高いソフトウェア部品のことを「コンポーネント」と呼びます。
その他 †
|