[Seasar-user:1791] Re: Action 内の独自クラスに AOP 可能? (Re: seasar2 を勉強するには )
Satoshi Kimura
ADS16648
2005年 4月 13日 (水) 00:26:44 JST
きむきむです。
AddActionを修正すれば、下記のdiconの設定で大丈夫です。
自動インジェクションであれば、
コンストラクタインジェクションで
public AddAction(AddService addService, Test test) {
//それぞれフィールドに代入
}
もしくは、セッターインジェクションで
public void setTest(Test test) {
this.test = test;
}
の、どちらかで可能です。試してみてください。
インジェクションとは、上記のような例で、
明示的にnewでインスタンス化するのは、インジェクションではありません。。。
キーと書いてあった部分ですね。
この辺が参考になるかと思います。
http://www.seasar.org/DIContainer.html#DIType
既に見ているかもしれませんが、
S2を勉強するためのドキュメントは、ここからたどれます。
http://www.seasar.org/s2.html
> そこで、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!!");
> }
> }
>
> ダメでした。
Seasar-user メーリングリストの案内