[[FAQ]] *S2AOP [#db17a433] #contents **diconでOGNL式にaspect適用可能か? [#d29c919e] >[[S2サポーター]] (2006-04-29 (土) 16:32:41)~ ~ ''Question''~ diconファイルで、OGNL式で取得したコンポーネントに対して~ アスペクトを適用するように記述することは可能でしょうか?~ ~ 以下のように書きたかったのですが、エラーになります。~ ~ <component> @hogeFactory @ HOGE <aspect>hogeInterceptor</aspect> </component> ~ ''Answer''~ できません.~ ~ S2AOP は,元のクラスを継承したサブクラスを作成します.~ アスペクトが適用されるのはそのサブクラスのインスタンスに~ なります.~ OGNL で取得したコンポーネントはすでにインスタンス化されて~ しまっており,S2AOP が作成したサブクラスのインスタンスでは~ ないためアスペクトは適用されません.~ ~ DelegateInterceptor を使えばやりたいことが~ できるかもしれません.~ ~ <component class="..."> <aspect>hogeInterceptor</aspect> <aspect> <component class="org.seasar.framework.aop.interceptors.DelegateInterceptor"> <property name="target">@hogeFactory @ HOGE</property> </component> </aspect> </component> ~ 一番外側の <component> 要素には class 属性を指定する必要があります.~ インタフェースを指定しても構いません.このコンポーネントを取得してメソッドを呼び出すと,~ 最初に hogeInterceptor が適用され,その後にDelegateInterceptor が適用されます.~ ~ DelegateInterceptor は target プロパティに指定されたコンポーネントに委譲します (同じメソッドを呼び出します). ~ 当然ですが,コンテナから取得したコンポーネントのメソッドを呼び出さないとアスペクトは適用されません.~ hogeFactory.HOGE のメソッドを呼び出してもダメです.~ > ''参考投稿''~ http://ml.seasar.org/archives/seasar-user/2006-April/005405.html~ http://ml.seasar.org/archives/seasar-user/2006-April/005408.html