[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 メーリングリストの案内