无法设置@Async方法

问题描述:

我正在尝试在我的Spring项目中使用@Async注释。为此,我将此行添加到我的servlet-config.xml中: <task:annotation-driven />。因此,我不能再运行该项目,我得到这个错误:无法设置@Async方法

Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.dynamease.web.user.social.LinkedInController]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given 

这里是我LinkedInController类:

@Controller 
@Scope(proxyMode = ScopedProxyMode.INTERFACES) 
public class LinkedInController { 

    private static final Logger logger = LoggerFactory.getLogger(LinkedInController.class); 

    private final LinkedIn linkedIn; 

    @Inject 
    public LinkedInController(LinkedIn linkedIn) { 
     logger.info("Initialisation du controleur linkedIn."); 
     this.linkedIn = linkedIn; 
    } 

    @RequestMapping(value = "linkedin") 
    public ModelAndView categorize() { 
     categorizeAndStore(linkedIn); 
     return mav; 
    } 

    @Async 
    public Future<Boolean> categorizeAndStore(LinkedIn source) { 
     // java stuff 
     return new AsyncResult<Boolean>(true); 
    } 
} 

我找到解决的办法是增加<aop:scoped-proxy>@Scope(proxyMode = ScopedProxyMode.INTERFACES)但作为你可以看到,它的存在并不重要。

如果方面应用于使用CGLIB代理的类,则需要不带参数的构造函数。尝试是这样的:

@Controller 
public class LinkedInController { 

    private static final Logger logger = LoggerFactory.getLogger(LinkedInController.class); 

    @Inject 
    private final LinkedIn linkedIn; 

    public LinkedInController() { 
     logger.info("Initialisation du controleur linkedIn."); 
    } 

    @RequestMapping(value = "linkedin") 
    public ModelAndView categorize() { 
     categorizeAndStore(linkedIn); 
     return mav; 
    } 

    @Async 
    public Future<Boolean> categorizeAndStore(LinkedIn source) { 
     // java stuff 
     return new AsyncResult<Boolean>(true); 
    } 
} 
+0

那么,它不运行知道,我很感激那个:) 但是,不asynchronymously执行categorizeAndStore()方法,任何想法,为什么? – fxm

+2

该方法必须从不同的对象中调用,如果您从同一个对象内调用该方法,它不会被拦截......请记住,它使用AOP ... http://static.springsource.org/ spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-understanding-aop-proxies –

+0

好吧,我会试试看。再次感谢 ! – fxm