2012-01-03 27 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 

無法弄清楚如何使用@Async與@EnableAsync ....它似乎產生代理,我不能得到一個單獨的句柄。春季異步 - 無法獲得異步豆

又如:

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是否實現了一個接口。如果是這樣的缺省時,Spring基於接口JDK proxies.In爲了從你必須使用由bean.For例如實現的接口的一個上下文查找豆

public class AsyncBean implements CertainInterface{ 
} 

您可以訪問它CertainInterface C = ctx.getBean(CertainInterface.class);

如果AsyncBean沒有實現任何接口,那麼Spring使用基於CGLIB類的代理。如果是這種情況,那麼你的代碼將工作。

如果你想AsyncBean仍然實現一個接口,但您要使用基於類的代理,那麼你可以指示春這樣做使用@EnableAsync(proxyTargetClass =真)