
企業システムの常識をJBossで身につける(3)
DI(依存性の注入)×AOP(アスペクト指向)の常識
株式会社ビーブレイクシステムズ
相原 淳、上川 伸彦
2009/10/29
双方向DIができるWebフレームワーク「JBoss Seam」
JBossの製品群で、DIをサポートしているフレームワークとして、JBoss Seamがあります。前回、このJBoss Seamを用いて簡単なサンプルアプリケーションを作成しました。その際に、JBoss Seamとは「JSFとEJB 3.0縫い合わせる(Seam)フレームワーク」であると説明しました。
■ アノテーションを使ったDIで「バイジェクション」?
では、JBoss Seamを使用した、DIとは一体どのようなものなのでしょうか? それは、JBoss Seamのもう1つの特徴として、アノテーションを使ったDIになります。これにより、「双方向のDI」という意味の「バイジェクション」が可能で、具体的にはインジェクションとアウトジェクションといったアノテーションを使用してDIを行います。
- @In インジェクション
- @Out アウトジェクション
バイジェクションを行うには、どのような設定が実用なのでしょうか? まず、バイジェクションを説明するに当たって、JBoss Seamの中心的な概念であるSeamコンテキスト(context)とSeamコンポーネント(component)について簡単に説明します。
Seamコンテキストとは、JBoss Seam上でSeamコンポーネントを管理している箱のようなものです。
その中で管理されているSeamコンポーネントとは、@Nameアノテーションが付加されたPOJOのクラスのことです。これは、前回作成したSeamActionクラスが当てはまります。そのとき、この@Nameを宣言することで、Seamのコンポーネントとして認識されているということを説明しました。JBoss Seamでは、このような仕組みによってオブジェクトの状態は管理されています。
以上を踏まえたうえで、@In、@Outのアノテーションについて説明します。
@Inは、「Seamコンポーネントの呼び出し時に、Seamコンテキストからインジェクションされることを指定する」ことを表します。
@Outは、「Seamコンポーネントの呼び出しが終了した際に、SeamコンポーネントからSeamコンテキストにアウトジェクトする」ことを表します。
バイジェクションに関しては、@Inと@Outを同時に記述することで「双方向のインジェクション」であることを表します。
■ JBoss Seamの「依存性の注入」
ではここで、簡単にまとめてみたいと思います。これまでの説明の全体的なイメージを、以下に表してみます。今回は、冒頭で作成したCompanyクラスと新しく作成したEmployeesクラス(社員クラス)を使用します。
![]() |
| 図4 Seamのインジェクション |
このイメージは、@Inを指定したものです。CompanyクラスのEmployeesフィールドに、@Inを指定してインジェクションを行っています。ここで重要なことは、直接Seamコンポーネントを参照しているのではなく、Seamコンテキストに存在するEmployeesよりインジェクトしていることです。上記の@Inの説明で「Seamコンテキストからインジェクションする」とは、このことを意味しています。以下に、記述をまとめます。
![]() |
| 図5 インジェクション、アウトジェクション、バイジェクション(画像をクリックすると、拡大します) |
@Outの記述は、@Inと変わりません。@Outの場合は、オブジェクトであるemployeesを使用した後に、SeamコンポーネントからSeamコンテキストにアウトジェクションを行います。バイジェクションは、同時に指定を行います。
■ JBoss Seamの「依存性の注入」のメリットとは
以上が、JBoss Seamの「依存性の注入」です。では、JBoss Seamでの「依存性の注入」には、どのようなメリットがあるのでしょうか?
これらのアノテーションを用いることで、DIの設定ファイルによる管理がなくなります。これによりXMLファイルの肥大化を防ぐことができます。また、DIコンテナによる「依存性の注入」は、DIコンテナの初期化時に、インスタンスをインジェクションするため、その後のインスタンスの構造が変更されることがありません。コンポーネントの状態は常に変化するため、@Inにより最新の状態を反映することにより、動的にコンポーネントの参照構造の変更を可能としているのです。
ここまでで、JBoss Seamのアノテーションを用いた「依存性の注入」を説明しましたが、このアノテーションには、そのほかにもいろいろな種類や使い方があります。これらに関しては、下記記事をご参照ください。JBoss Seamやアノテーションについて詳しく解説してあります。
JBossのDIについて説明したところで、今度は、JBoss AOPを説明したいと思います。
POJOでアスペクトの振る舞いを実装する「JBoss AOP」
JBoss AOPとは、アスペクト指向プログラミングのフレームワークです。先ほど説明したような、基本的なアスペクト指向を取り入れた実装をサポートしています。主な特徴として、XMLファイルを使わなくてもアノテーション用いてアスペクトを可能にしていることや通常のJavaのクラス(POJO)を使用することでアスペクトの振る舞いを実装することが挙げられます。
JBoss AOPの設定や実装方法に関しては、少し古いですが、下記記事をご参照ください。
結局、DI×AOPを使う有効性って何?
以上、駆け足でしたが、DI×AOPがどのようなものかを大体知っていただけたかと思います。最後に、DIやAOPについて簡単にまとめてみます。
まずDIに関しては、Javaのオブジェクト指向の概念であるインターフェイスを利用して、オブジェクトにインスタンスの注入できると説明しました。これにより設定ファイルを修正することで、オブジェクトをコンポーネント(部品)として扱うことができ、各オブジェクトの拡張性の向上やテストを行いやすくすることが可能です。
一方のAOPでは、オブジェクト指向ではカバーできない処理の散在を、ひとまとめにすることで重複ロジックを削除できます。
これらの技術を取り入れることによって、企業向けアプリケーションの開発では、開発面の生産性・メンテナンス面が向上し、プロジェクトの工数を抑えるなどの有効性につながっていきます。この有効性は、企業向けアプリケーション開発において非常に重要なことであるといえます。
繰り返しますが、実際の企業向けアプリケーションの開発では、DI×AOPを取り入れたフレームワーク群を使用して、ごく当たり前のように開発業務が行われています。まだ、DI×AOPを用いたプロジェクトで開発を行ったことがない方やこれから初めてJavaを用いたWeb開発プロジェクトに配属される方は、DIやAOPの技術を意識してみてください。いままでとは違った観点で開発できると思います。
■ @IT関連記事
| DI×AOPのこれまで、Seasarの今、そしてSlim3へ… Seasar Conference 2009 White レポート DI×AOPを軸にしたJavaのWebシステム開発の過去・現在・未来や、日本発の世界標準を目指すSlim3の最新情報について 「Java
Solution」フォーラム 2009/4/2 |
||
| DIとAOPがサーバ・コンポーネント技術を変える J2EE Watch(7) EJBのような重量級のコンテナに対するアンチテーゼとして登場したDI。いまやDI+AOPは、J2EEの未来にも影響を与える存在となりつつある 「Java
Solution」フォーラム 2005/6/17 |
||
| アスペクト指向プログラミング オーバービュー The Rational Edge (24) IT業界はソフトウェア構築アプローチの改良の歴史でもある。このラインアップに最近加わったのが、アスペクト指向プログラミングだ |
| アスペクト指向のバリエーション解説 この連載では「アスペクト指向とは何か?」というところから始め、AspectJやJBossAOPなどを用いたAOPの実装を紹介していく 第1回 アスペクト指向の基礎とさまざまな実装 第2回 AspectJから学ぶアスペクト指向の理解 第3回 JBoss AOPとAOPフレームワークの役目 第4回 「AspectWerkz」の利用法 第5回 アスペクト指向理解のまとめ |
| プロフィール |
| 相原 淳(あいはら じゅん) 株式会社ビーブレイクシステムズ開発部所属 専門分野:Webシステム開発・保守 2008年よりビーブレイクシステムズに在籍。 前職では、Javaを用いたWEB系のシステム開発や保守作業に従事。Javaの開発を行っていく中で、オープンソースに興味を持ち、その分野で活躍できるビーブレイクシステムズに転職し、現在に至る。 |
| プロフィール |
| 上川 伸彦(かみかわ のぶひこ) 株式会社ビーブレイクシステムズ技術担当取締役。 RDB製品の開発、各種業界団体におけるXML/EDI標準の策定やSOA基盤の設計などに従事。最近は、ITコンサル業よりも、業務システムの構築に携わることが多く、お客さまからの無理難題と向き合う日々を送っている。 |
| Index | ||||||||||
|
||||||||||
企業システムの常識をJBossで身につける バックナンバー 連載インデックスへ»
- 第1回 企業向けアプリの常識を学び、JBossの環境構築
- 第2回 “全部入り”のEclipseで学ぶ統合開発環境の常識
- 第3回 DI(依存性の注入)×AOP(アスペクト指向)の常識
- 第4回 企業でも情報整理で利用が進む「ポータル」の常識
- 第5回 非同期処理と疎結合ができる「メッセージング」の常識
- 第6回 いまさら聞けない「Webサービス」の常識
- 第7回 クラウドで再注目の「分散コンピューティング」の常識
- 第8回 悲観もあれば楽観もある「トランザクション」の常識
- 第9回 社内システムのセキュリティとアクセス制御の常識
- 第10回 内部統制に効く! ID管理・シングルサインオンの常識
- 第11回 「全体を見る」ためのビジネスプロセス・BPMの常識
- 最終回 急速なビジネスの変化に対応できる「BRMS」の常識
| Java Solution全記事一覧 |
TechTargetジャパン
- Scalaのパッケージ、アクセス修飾子、オブジェクト継承 (2012/5/22)
インポート、パッケージオブジェクト、抽象クラス/抽象メソッド、オーバーライド、final、シールドクラスなども - 基幹系システムでCloud SQLは使えるか試してみた (2012/5/17)
サンプルとしてMRPシステムを作成して動かし、「再帰呼び出し」などのパフォーマンスを測定して検証してみます - アジャイル管理ツール9選+Pivotal Tracker入門 (2012/5/14)
群雄割拠のアジャイルプロジェクト管理ツールを9つ紹介し、特に注目を集めているPivotal Trackerの基本的な使い方を解説します - サーバサイドJSやJavaでWebアプリが作れるXPages (2012/5/11)
Notes/Dominoの資産をサーバサイドJavaScriptやJavaで操作し、HTMLやJavaScript、CSSをUIにできる技術を紹介
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




