DI(依存性の注入)×AOP(アスペクト指向)の常識企業システムの常識をJBossで身につける(3)(3/4 ページ)

» 2009年10月29日 00時00分 公開
[相原淳, 上川伸彦株式会社ビーブレイクシステムズ]

DI×AOPの分野で世界中で使われている「Spring」

 Springとは、DI機能やAOPをサポートするオープンソースのWebアプリケーションフレームワーク/ミドルウェア群です。SpringのWebサイトよりダウンロードできます。Springフレームワークの設計思想は、ロッド・ジョンソン氏の著書『Expert One-on-one J2EE Design and Development』を元に作られています。

 またSpringは、小さなフレームワークの集合体として見なすことができます。このフレームワークは、主に以下のサブプロジェクトによって構成されています。

  • Spring Framework
  • Spring Web Flow
  • Spring BlazeDS Injection
  • Spring Web Services
  • Spring Security
  • SpringSource dm Server
  • SpringSource dm Server Tools

 Springの主な機能として、Javaのオブジェクトのライフサイクル管理を行うInversion of Controlコンテナや各トランザクションの管理やStrutsの中核概念であるMVCアーキテクチャを独自の視点で開発したSpringMVCなどさまざまなアーキテクチャが存在し、非常に大きなオープンソース群です。

 実際にSpringでのDIやAOPを確認したい方は、少し古いですが下記記事をご覧になってください。

 また、もっと新しいSpring 2.0については、下記記事をご参照ください。DIにおける設定ファイルの問題などが改善されています。

国産DI×AOPとして名を馳せる「Seasar2」

 Seasarとは、特定非営利法人SeasarFoundationよりThe Seasar Projectというコミュニティ形成し、オープンソースとして提供している純国産のWebアプリケーションフレームワーク/ミドルウェア群です。

 Seasarをひと言で呼ぶ場合、主にSeasar2(S2Container)のことを指し、これはDIを行う軽量コンテナのことを表しています。

 Seasarプロジェクトには、さまざまなオープンソースのソフトウェアが提供されており、それらは、Webサイトの指示に従うだけで、簡単にインストールしてサンプルアプリケーションを確認できます。Seasarは、純国産のソフトウェアであるため、ドキュメントや開発者向け情報が日本語であることも魅力的です。SeasarプロジェクトのDIやAOPについての詳細は、少し古いですが下記記事をご覧ください。

 また、JavaのJSP/ServletやStrutsを用いたWebアプリケーション開発の経験がある方は、Seasarプロジェクトで提供されているS2StrutsSAStrutsなどのフレームワークを見てみてください。これらは、Strutsの機能をラップして拡張しており、DI×AOPやアノテーションなどの機能に加え、Struts特有のXMLファイルの省略化を可能とすることで開発者に負担を掛けないフレームワークの作りになっています。SAStrutsについての詳細は、下記記事をご覧ください。

 Seasarで提供されているソフトウェアのソースコードは、非常にJavaの勉強になるので、そのほかのフレームワークに関しても、ぜひご覧になってください。

Googleが提供する次世代DIコンテナ「Guice」

 Guice(以下、Guice)とは、グーグルが提供しているDIコンテナです。アノテーション機能やジェネリックを活用したDIが特徴で、Google Codeよりダウンロードできます。

 またGuiceは、「XMLファイルを利用しないDIフレームワーク」という特徴があります。DIを行う際に、注入するインスタンスは、Javaのアノテーション機能を用いてインジェクションを行います。

 DIの設定によるXMLファイルの肥大化は、アノテーションを用いることによって回避できます。実際にWebサイトより、guice-2.0.zipをインストールして以下の簡単なサンプルを作成してみます。

package inject;
 
import com.google.inject.Inject;
 
class Person {
 
    @Inject
    private String name;
    @Inject
    private Integer age;
 
    public void view() {
        System.out.println("名前" + " : " + name);
        System.out.println("年齢" + " : " + age);
    }
}
Person.java
package inject;
 
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
 
public class Main {
    public static void main(String[] args) {
        Injector injector = Guice.createInjector(new AbstractModule() {
            @Override
            protected void configure() {
                 bind(String.class).toInstance("bBreak");
                 bind(Integer.class).toInstance(20);
            }
        });
        injector.getInstance(Person.class).view();
    }
}
Main.java

 Personクラスのフィールドに、JavaのString値とInteger値を注入できます。Guiceに興味のある方は、いろいろと実装してみてください。

 ここまでで、ざっくりとDI×AOPをサポートしているフレームワーク/ソフトウェアを紹介しました。これらのフレームワーク/ソフトウェアをぜひご自身の環境でも動かしてみてください。DIやAOPに対する理解が深まると思います。次ページでは、本連載の主眼であるJBossのDIとAOPについて説明します。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。