2011年11月4日金曜日

[Seasar2][SAStruts]コンポーネントスキャンによるDIの方法

Seasar2のDIはapp.diconに記述されているので、DIについての設定を追加する場合は、app.diconを変更する。
通常は、次のようにユーザ定義のみを集めた独自のdiconファイルを新規作成し、app.diconからそのファイルをインクルードする。

  <include path="user.dicon"/>

特定のパッケージ配下にあるクラス全てをDIコンポーネントとして識別させるための設定は、次の通り。

  <component class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister">
    <initMethod name="addClassPattern">
      <arg>"rootpackage.dao"</arg>
      <arg>".*DaoImpl"</arg>
    </initMethod>
  </component>

このように記述すると、「rootpackage.dao配下にある ".*DaoImpl" という名前のクラスをコンポーネントとして認識する」という意味になる。
例えばrootpackage.daoにTestDaoImplというクラスがあった場合、この設定でコンポーネントとして認識される。

コンポーネントとして認識されているクラスは、@Resource(@Bindingでも可)アノテーションでDIできる。

    @Resource
    private TestDao testDao;

このように記述することで、TestDaoImplが自動でインジェクションされる。
(newしなくても、最初からクラスに生成済みのインスタンスが入っている)

上記設定は、ファイルシステムにソースファイルがある場合の設定である。
JARファイル内のクラスを探す場合は、JarComponentAutoRegisterを用いる。

0 件のコメント:

コメントを投稿