yohjizzz's Blog

I'm a Programmer.

AutowiringRequestProcessor を使う。

AutowiringRequestProcessor (org.springframework.web.struts.AutowiringRequestProcessor) は、
SpringFramework が提供する Struts の RequestProcessor の拡張クラス。SpringFramework 2.0 から導入されたもの。

このクラスを利用(struts-config.xml に指定)すると、わざわざアクションをDIコンテナに定義しなくても、
アクションに対して、DIコンテナで管理されるオブジェクトへの参照を埋め込むことができる。
仕組みとしては、アクションのプロパティ名(またはクラス型)により、自動的にインスタンス化を行う。

準備としては、こんな↓感じ。

以下、struts-config.xml

  <!-- プロセッサに AutowiringRequestProcessor を指定する。 -->
  <controller
    nocache="false"
    inputForward="false"
    processorClass="org.springframework.web.struts.AutowiringRequestProcessor" />

以下、web.xml

<!-- サーブレットの初期パラメータとして autowire を指定する。 -->
<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    ・
    ・
    ・
    <init-param>
      <param-name>spring.autowire</param-name>
      <!--
        "byName" ... 名前により自動的なオブジェクトの参照を行う。
        "byType" ... クラス型により自動的なオブジェクトの参照を行う。※デフォルト値。
      -->
      <param-value>byName</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

このプロセッサを使うことでアクションクラスは、
 DIコンテナ側に定義することなく (DelegatingActionProxy を使わずに)、
 さらに SpringFramework に依存させることなく (ActionSupport を継承して getWebApplicationContext() を使用せずに)、
 DIxAOP 上で管理される他の(ビジネス層などの)オブジェクトへの参照を自動化できる。


うん。いいと思う。これ。

Struts で開発されたシステムの拡張を行うことを考えれば、Struts と Spring の連携はまだありそうだけど、
新規の案件では Spring MVC で事足りるんじゃないかなと思う今日この頃…。