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 ....它似乎产生了代理,我无法获得单例的句柄。
另一个例子:
@Bean
public Bean bean(){
Bean bean=new Bean();
bean.registerHandler(asyncBean());
}
@Bean
public AsyncBean asyncBean(){
return new AsyncBean();
}
这也会抛出相同的类强制转换异常......引起:
java.lang.ClassCastException:$ Proxy14无法强制转换为AsyncBean
答案 0 :(得分:1)
Spring要求AsyncBean是一个接口而不是一个类。通常,代理类必须是接口。
答案 1 :(得分:0)
AsyncBean是否实现了一个接口。如果是这样,默认情况下Spring会生成基于接口的JDK代理。为了从上下文中查找bean,你必须使用bean实现的一个接口。例如
public class AsyncBean implements CertainInterface{
}
您可以访问CertainInterface c = ctx.getBean(CertainInterface.class);
如果AsyncBean没有实现任何接口,那么Spring使用基于CGLIB类的代理。如果是这样,那么你的代码就可以了。
如果你希望AsyncBean仍然实现一个接口但你想使用基于类的代理,那么你可以指示Spring这样做使用@EnableAsync(proxyTargetClass = true)