[Seasar-user:1787] Action内の独自クラスにAOP可能?(Re: seasar2を勉強するには)

トノサキ . business_y
2005年 4月 12日 (火) 21:04:38 JST


般林様とてもわかりやすい資料をありがとうございました。S2の概要がとてもわかり
やすいです。

実はやりたいことがありまして、表題の通りなのですが、Action内の独自クラスにも
AOPが可能でしょうか。(というか可能なのだそうです)
http://seasar.satin.jp/wiki/index.php?AnsweringYourQuestionsこちらのサイトの
「質問こーなー」に質問を書いたところ、以下のような回答をいただきました。

対象のクラスがdiconファイルに記述されていて、ContainerからActionにインジェク
ションされていれば、可能です。(自分でコンテナから取得しても可)

そこで、S2StrutsExample-V1.1.5をもとに、Add.diconに以下のように書きました。
(ContainerからActionにインジェクションされていれば、という意味が理解できて
いませんが。明示的にインスタンス化する?)
<components>
  <component class="org.seasar.struts.examples.add.AddServiceImpl"/>
  <component class="org.seasar.struts.examples.add.TestImpl" >
      <aspect pointcut="showMessage">
          <component 
class="org.seasar.framework.aop.interceptors.TraceInterceptor"/>
      </aspect>
  </component>
</components>

AddActionを以下のようにしました。
public ActionForward execute(
    CalculationForm calForm = (CalculationForm) form;
    int result = addService_.add(calForm.getArg1(), calForm.getArg2());
    calForm.setResult(result);
    TestImpl test = new TestImpl();
    test.showMessage();             //← ここにAOPしたい
    return (mapping.findForward("success"));
}

TestImplは以下です。
public class TestImpl implements Test{
    public void showMessage() {
        System.out.println("Hello Aspect!!");
    }
}

ダメでした。
そこで、Add.diconを以下のように書きました。(AddAction内のTestImpl というイ
メージで)
<components>
    <component class="org.seasar.struts.examples.add.AddServiceImpl"/>
    <component class="org.seasar.struts.examples.add.AddAction">
        <component class="org.seasar.struts.examples.add.TestImpl" >
            <aspect pointcut="showMessage">
                <component 
class="org.seasar.framework.aop.interceptors.TraceInterceptor"/>
            </aspect>
        </component>
    </component>
</components>

設定ファイルの書き方がダメで怒られました。
これは設定ファイルの書き方の問題なのでしょうか。ご教示ください、よろしくお願
いします。

#ContainerからActionにインジェクションされていれば、がキーなのかな。





Seasar-user メーリングリストの案内