2012-01-03 54 views
1
ApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class); 

AsyncBean session = ctx.getBean(AsyncBean.class); 

Caused by: java.lang.ClassCastException: $Proxy14 cannot be cast to AsyncBean 

を取得できませんが、@EnableAsyncで@Asyncを使用する方法を見つけ出すことはできません....プロキシを生成するようだと、私はシングルトンへのハンドルを取得することはできません。春非同期 - 非同期豆に

もう一つの例:

とjava.lang.ClassCastException::これはまた、同じクラスのキャスト例外がスローされます

@Bean 
public Bean bean(){ 
    Bean bean=new Bean(); 
    bean.registerHandler(asyncBean()); 
} 

@Bean 
public AsyncBean asyncBean(){ 
    return new AsyncBean(); 
} 

...によって引き起こさ$ Proxy14はAsyncBeanにキャストすることはできません

答えて

1

Springでは、AsyncBeanがクラスではないインターフェイスになる必要があります。一般に、プロキシされたクラスはインタフェースでなければなりません。

0

AsyncBeanはインターフェイスを実装していますか?あなたは

public class AsyncBean implements CertainInterface{ 
} 

bean.For例により実装されるインタフェースのいずれかを使用する必要があるコンテキストからBeanをルックアップするためのインタフェースベースのJDK proxies.In順序を生成している場合、デフォルトの春であなたはCertainInterface C =とそれにアクセスすることができますctx.getBean(CertainInterface.class);

AsyncBeanがインターフェイスを実装していない場合、SpringはCGLIBクラスベースのプロキシを使用します。その場合、あなたのコードは動作します。

AsyncBeanにインターフェイスを実装したいが、クラスベースのプロキシを使用したい場合は、@EnableAsync(proxyTargetClass = true)を使用するようSpringに指示することができます。