AspectJでLTWをセットアップし、かなり早くて成功しました。ここでの設定は次のとおりです。 beans.xmlの:アップキャスト時にAspectJとSpring LTWが動作しません
<context:annotation-config />
<aop:aspectj-autoproxy />
<context:spring-configured />
<context:load-time-weaver />
<context:component-scan base-package="com.test.service" />
私のクラスにautowiredされるサービス:
@Service
public class MyService {
}
親クラス:
public class Bar {
}
設定可能なクラス、そのautowiresサービスとバーを拡張します。
public class Foo {
private Bar bar;
public void setBar(Bar bar) {
this.bar = bar;
}
}
そして、成功したテストケース:
@Configurable
public class BarExtended extends Bar{
@Autowired
private MyService service;
public MyService getWeavedInObject(){
return service;
}
}
そして、ちょうど親クラスのバーにreferanceを持っているクラス
。 BarExtendedのインスタンスを作成し、LTWが動作しているかどうかをチェックします。 Fooクラスは何もしません。@Test
public void simple(){
Foo foo = new Foo();
BarExtended barExtended = new BarExtended();
assertNotNull("LTW didn't work.", barExtended.getWeavedInObject());
}
このテストは緑色で実行されます。しかし、テストに失敗した後:
私はちょうどクラスBarExtendedがFooに設定されている行を挿入します。ダウンキャストは、AspjectJが機能しないようにします。私はBarExtendedクラスを使用するのFooクラスを変更する場合
ところで、(そう何のアップキャストは必要ありません):
public class Foo {
private BarExtended bar;
public void setBar(BarExtended bar) {
this.bar = bar;
}
}
上記のテストは動作します。構成可能なオブジェクトがアップキャストされているとき、なぜAspjectJがとても奇妙に振る舞うのか誰にも考えられていますか?
編集:Follwingも失敗:
@Test
public void simple() {
Foo foo = new Foo();
BarExtended barExtended = new BarExtended();
Bar bar = (Bar) new BarExtended();
foo.setBar(bar);
assertNotNull("LTW didn't work.", barExtended.getWeavedInObject());
}
異なるBarExtendedオブジェクトがfooに設定され、第一barExtendedオブジェクトはAspectJのでは無視されます。 しかしBarExtendedをインスタンス化するためにリフレクションを使用して作品:
@Test
public void simple() throws InstantiationException, IllegalAccessException{
Foo foo = new Foo();
Bar barExtended = (Bar) BarExtended.class.newInstance();
foo.setBar(barExtended);
assertNotNull("LTW didn't work.", ((BarExtended)barExtended).getWeavedInObject());
}
奇妙に、それはないですか?
どうもありがとう
よろしく、
アンドレアス
どのバージョンのJava、AspectJをお使いですか? – Ralph
Java 1.6、aspectj 1.6.12、およびSpring 3.1.0.RELEASEを使用します。 – noCodeFound
血まみれの地獄、私もこの問題が発生しています。私はJIRAでこの問題を再現可能なテストケースとともに提起しました:https://jira.spring.io/browse/SPR-12901 – bertie