2012-01-03 4 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 .... это, кажется, производит прокси, и я не могу получить дескриптор синглтона.Spring Асинхронный - не удается получить ASync компонентов-

Другой пример:

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

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

Это также проливает же исключение класс литых ... Вызванный:

java.lang.ClassCastException: $ Proxy14 не может быть приведен к AsyncBean

ответ

1

Spring требует, чтобы AsyncBean был интерфейсом, а не классом. В общем, прокси-класс должен быть интерфейсом.

0

Is AsyncBean реализует интерфейс. Если это так по умолчанию Spring генерирует интерфейс на основе JDK proxies.In заказ для поиска бина из контекста вы должны использовать один из интерфейсов, реализованных на примере bean.For

public class AsyncBean implements CertainInterface{ 
} 

Вы можете получить доступ к нему, как CertainInterface с = ctx.getBean (CertainInterface.class);

Если AsyncBean не реализует какой-либо интерфейс, Spring использует CGLIB-классы на основе прокси. Если это так, то ваш код будет работать.

Если вы хотите AsyncBean до сих пор реализовать интерфейс, но ваш хотите использовать прокси-класс, основанный на то вы можете поручить Spring сделать это использовать @EnableAsync (proxyTargetClass = истина)