2012-01-03 31 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 =真)