Java Spring异步-Can';无法获取异步bean

Java Spring异步-Can';无法获取异步bean,java,spring,proxy,classcastexception,spring-3,Java,Spring,Proxy,Classcastexception,Spring 3,不知道如何将@Async与@EnableAsync一起使用……它似乎会产生代理,我无法获得单例的句柄 另一个例子: ApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class); AsyncBean session = ctx.getBean(AsyncBean.class); Caused by: java.lang.ClassCastException: $Proxy14 cannot be c

不知道如何将@Async与@EnableAsync一起使用……它似乎会产生代理,我无法获得单例的句柄

另一个例子:

ApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);

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

Caused by: java.lang.ClassCastException: $Proxy14 cannot be cast to AsyncBean
这也会引发相同的类强制转换异常。。。原因:

java.lang.ClassCastException:$Proxy14不能强制转换为AsyncBean


Spring要求AsyncBean是接口而不是类。一般来说,代理类必须是接口。

AsyncBean是否实现接口。默认情况下,如果是这样,Spring会生成基于接口的JDK代理。为了从上下文中查找bean,您必须使用bean实现的一个接口

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

@Bean 
public AsyncBean asyncBean(){
   return new AsyncBean();
 }
您可以通过CertainInterface c=ctx.getBean(CertainInterface.class)访问它

如果AsyncBean没有实现任何接口,那么Spring将使用基于CGLIB类的代理。如果是这样的话,那么你的代码就可以工作了

如果您希望AsyncBean仍然实现一个接口,但希望使用基于类的代理,那么您可以指示Spring使用@enableSync(proxyTargetClass=true)来实现

public class AsyncBean implements CertainInterface{
}