Spring 3.2 - 将@EnableAsync添加到@Configuration类时,项目无法加载

时间:2014-12-10 12:15:00

标签: java spring

我需要一个异步执行bean的方法。为此,我将@Async注释添加到我的bean方法和@Configuration注释类的@EnableAsync,但从那时起,我的项目已停止加载,并出现以下错误:

  

ERROR 2014-12-10 17:03:26   org.springframework.web.context.ContextLoader:331 - 上下文   初始化失败   org.springframework.beans.factory.BeanCreationException:错误   用名称' webSecurityConfig'创建bean:注入自动装配   依赖失败;嵌套异常是   org.springframework.beans.factory.BeanCreationException:不能   autowire字段:com.softech.dms.service.DetailService   com.softech.dms.config.WebSecurityConfig.detailService;嵌套   异常是org.springframework.beans.factory.BeanCreationException:   创建名称为' detailService':注入自动装配的bean时出错   依赖失败;嵌套异常是   org.springframework.beans.factory.BeanCreationException:不能   autowire字段:com.softech.dms.service.UserService   com.softech.dms.service.DetailService.userService;嵌套异常是   org.springframework.beans.factory.BeanCreationException:错误   使用名称' userServiceImpl'创建bean:注入自动装配   依赖失败;嵌套异常是   org.springframework.beans.factory.BeanCreationException:不能   autowire字段:com.softech.dms.service.CustomerService   com.softech.dms.service.impl.UserServiceImpl.customerService;嵌套   异常是org.springframework.beans.factory.BeanCreationException:   创建名称' customerServiceImpl':注入的bean时出错   自动连接依赖失败;嵌套异常是   org.springframework.beans.factory.BeanCreationException:不能   autowire字段:com.softech.dms.service.FolderService   com.softech.dms.service.impl.CustomerServiceImpl.folderService;嵌套   异常是org.springframework.beans.factory.BeanCreationException:   创建名称为' folderServiceImpl':注入的bean时出错   自动连接依赖失败;嵌套异常是   org.springframework.beans.factory.BeanCreationException:不能   autowire字段:private com.softech.dms.service.BookmarkService   com.softech.dms.service.impl.FolderServiceImpl.bookmarkFolderService;   嵌套异常是   org.springframework.beans.factory.BeanCreationException:错误   创建名称为' bookmarkServiceImpl':注入自动装配的bean   依赖失败;嵌套异常是   org.springframework.beans.factory.BeanCreationException:不能   autowire字段:private com.softech.dms.service.DocumentService   com.softech.dms.service.impl.BookmarkServiceImpl.documentService;   嵌套异常是   org.springframework.beans.factory.BeanCurrentlyInCreationException:   创建名称为' documentServiceImpl':Bean名称的bean时出错   ' documentServiceImpl'已被注入其他豆类   其raw中的[documentHistoryServiceImpl,sharedDocumentServiceImpl]   版本作为循环引用的一部分,但最终已经   包裹。这意味着所述其他bean不使用最终版本   的豆子。这通常是过度渴望类型匹配的结果 -   考虑使用' getBeanNamesOfType'使用' allowEagerInit'旗   例如,关闭了。在   org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)     在   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1146)     在   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)     在   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)     在   org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:296)     在   org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)     在   org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)     在   org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)     在   org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628)     在   org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)     在   org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)     在   org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)     在   org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)     在   org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)     在   org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4779)     在   org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273)     在   org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     在   org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1566)     在   org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1556)     at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:334)     在java.util.concurrent.FutureTask.run(FutureTask.java:166)at   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615)     在java.lang.Thread.run(Thread.java:724)

当我删除@EnableAsync注释时,一切都完美无缺。如果我在这里错过了什么,请建议。

2 个答案:

答案 0 :(得分:1)

尝试将default-lazy-init="true"添加到 xml配置文件

本文提供了有关循环依赖问题的一些说明:

http://java.dzone.com/articles/resolve-circular-dependency

答案 1 :(得分:0)

不要使用@Lazy(value = true)。

实现@Async注释有两种重要情况。

  1. 您应将@Async用于公共方法。
  2. 您应该从另一个类调用public方法。你不应该公开 公共方法的同一类中的方法。