无法设置@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);
}
}
那么,它不运行知道,我很感激那个:) 但是,不asynchronymously执行categorizeAndStore()方法,任何想法,为什么? – fxm
该方法必须从不同的对象中调用,如果您从同一个对象内调用该方法,它不会被拦截......请记住,它使用AOP ... http://static.springsource.org/ spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-understanding-aop-proxies –
好吧,我会试试看。再次感谢 ! – fxm