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