[CONTAINER-350] インターセプタをS2以外で使うとエラー Created: 2009-03-15 Updated: 2009-03-17 Resolved: 2009-03-17 |
|
Status: | Closed |
Project: | S2Container |
Component/s: | S2Container |
Affects Version/s: | 2.3.23, 2.4.34 |
Fix Version/s: | None |
Type: | Bug | Priority: | Major |
Reporter: | kimura | Assignee: | higa |
Resolution: | Won't Fix | Votes: | 0 |
Labels: | None |
Description |
Class thisClass = invocation.getThis().getClass(); return superClass; のthisClass.getInterfaces()[0]でぬるぽ。 Class thisClass = invocation.getThis().getClass(); |
Comments |
Comment by koichik [ 2009-03-17 ] |
そんなわけで (どんなわけで?),クローズ. |
Comment by kimura [ 2009-03-16 ] |
そう説明するので、クローズでいいです。 |
Comment by koichik [ 2009-03-16 ] |
15:38 のコメントを見ないで 16:00 のコメント書いちゃいました.きりのいい時間になるまでリロードしないで置いておいたもので. |
Comment by koichik [ 2009-03-16 ] |
> AOPの実装によっては、FooにtoString()を追加する可能性もあるので、微妙な話になりそうな気が・・・ だから,最初のコメントで「AOP をどのように実現しているかによって getTargetClass() の実装を差し替え可能にする必要が」あると書いたわけ.対象のクラスを求める方法は AOP の実装次第ですよね? そして AbstractInterceptor の実装は S2AOP が前提になっているわけです. > も、イヤですか? いやです.あまりにアドホックすぎるし意味不明. public class Foo {} public class Bar extends Foo {} Bar の toString() メソッドに AOP を適用した場合,サブクラス化しない AOP 実装だと getTargetClass() が Foo.class を返すことになりませんか? > S2Javelinを使いたかった そちらで AbstractInterceptor がロードされるときに getTargetClass() をそちらの AOP 実装に合わせて置き換えればいいのでは? |
Comment by kimura [ 2009-03-16 ] |
一個前のソースは、無かったことに。。(^^; |
Comment by kimura [ 2009-03-16 ] |
AOPの実装によっては、FooにtoString()を追加する可能性もあるので、微妙な話になりそうな気が・・・ protected Class getTargetClass(MethodInvocation invocation) { try{ return superClass; |
Comment by koichik [ 2009-03-16 ] |
> return method.getDeclaringClass(); できません. public class Foo {} の toString() メソッドにインターセプタを適用した場合,getTargetClass() は Foo.class を返すべきですが,Method#getDeclaringClass() は Object.class を返します. |
Comment by kimura [ 2009-03-16 ] |
S2だけだと、 Class thisClass = invocation.getThis().getClass(); return superClass; > S2 以外でも利用したいインターセプタは,AbstractInterceptor を継承しなければいいと思います. |
Comment by koichik [ 2009-03-16 ] |
このメソッドが親クラスを取得しているのは,サブクラス化によって AOP を実現する S2AOP に依存しているからであり,S2 以外での動作は想定されていません. よって対応せずにクローズするに +1. S2 以外でも利用したいインターセプタは,AbstractInterceptor を継承しなければいいと思います. |
Comment by kimura [ 2009-03-15 ] |
AbstractInterceptorで(^^; |