@EnableAsync annotation metadata was not injected Spring容器启动后访问Servlet报错

Posted David_Deng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@EnableAsync annotation metadata was not injected Spring容器启动后访问Servlet报错相关的知识,希望对你有一定的参考价值。

@EnableAsync annotation metadata was not injected

2015年12月20日 20:06:54

在初始化spring事务部分碰到该错误, 详细错误信息如下:

 

[plain] view plain copy
 
  1. 警告: Exception encountered during context initialization - cancelling refresh attempt  
  2. org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘org.springframework.context.annotation.internalAsyncAnnotationProcessor‘ defined in org.springframework.scheduling.annotation.ProxyAsyncConfiguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor]: Factory method ‘asyncAdvisor‘ threw exception; nested exception is java.lang.IllegalArgumentException: @EnableAsync annotation metadata was not injected  
  3.     at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)  
  4.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1119)  
  5.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1014)  
  6.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)  
  7.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)  
  8.     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)  
  9.     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)  
  10.     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)  
  11.     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)  
  12.     at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:220)  
  13.     at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:615)  
  14.     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:465)  
  15.     at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:434)  
  16.     at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)  
  17.     at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)  
  18.     at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:782)  
  19.     at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:424)  
  20.     at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:774)  
  21.     at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:249)  
  22.     at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1242)  
  23.     at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717)  
  24.     at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)  
  25.     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)  
  26.     at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)  
  27.     at org.eclipse.jetty.server.Server.doStart(Server.java:282)  
  28.     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)  
  29.     at net.sourceforge.eclipsejetty.starter.embedded.JettyEmbeddedAdapter.start(JettyEmbeddedAdapter.java:67)  
  30.     at net.sourceforge.eclipsejetty.starter.common.AbstractJettyLauncherMain.launch(AbstractJettyLauncherMain.java:84)  
  31.     at net.sourceforge.eclipsejetty.starter.embedded.JettyEmbeddedLauncherMain.main(JettyEmbeddedLauncherMain.java:42)  
  32. Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor]: Factory method ‘asyncAdvisor‘ threw exception; nested exception is java.lang.IllegalArgumentException: @EnableAsync annotation metadata was not injected  
  33.     at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)  
  34.     at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)  
  35.     ... 28 more  
  36. Caused by: java.lang.IllegalArgumentException: @EnableAsync annotation metadata was not injected  
  37.     at org.springframework.util.Assert.notNull(Assert.java:112)  
  38.     at org.springframework.scheduling.annotation.ProxyAsyncConfiguration.asyncAdvisor(ProxyAsyncConfiguration.java:45)  
  39.     at org.springframework.scheduling.annotation.ProxyAsyncConfiguration
    EnhancerBySpringCGLIBEnhancerBySpringCGLIB
    82eb591.CGLIB$asyncAdvisor$0(<generated>)  
  40.     at org.springframework.scheduling.annotation.ProxyAsyncConfiguration
    EnhancerBySpringCGLIBEnhancerBySpringCGLIB
    82eb591
    FastClassBySpringCGLIBFastClassBySpringCGLIB
    ed8c37b9.invoke(<generated>)  
  41.     at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)  
  42.     at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:309)  
  43.     at org.springframework.scheduling.annotation.ProxyAsyncConfiguration
    EnhancerBySpringCGLIBEnhancerBySpringCGLIB
    82eb591.asyncAdvisor(<generated>)  
  44.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  45.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)  
  46.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
  47.     at java.lang.reflect.Method.invoke(Method.java:606)  
  48.     at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)  
  49.     ... 29 more  
  50.   
  51. 十二月 16, 2015 11:42:21 下午 org.springframework.web.context.ContextLoader initWebApplicationContext  
  52. 严重: Context initialization failed  
  53. org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘org.springframework.context.annotation.internalAsyncAnnotationProcessor‘ defined in org.springframework.scheduling.annotation.ProxyAsyncConfiguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor]: Factory method ‘asyncAdvisor‘ threw exception; nested exception is java.lang.IllegalArgumentException: @EnableAsync annotation metadata was not injected  
  54.     at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)  
  55.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1119)  
  56.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1014)  
  57.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)  
  58.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)  
  59.     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)  
  60.     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)  
  61.     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)  
  62.     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)  
  63.     at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:220)  
  64.     at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:615)  
  65.     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:465)  
  66.     at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:434)  
  67.     at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)  
  68.     at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)  
  69.     at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:782)  
  70.     at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:424)  
  71.     at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:774)  
  72.     at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:249)  
  73.     at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1242)  
  74.     at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717)  
  75.     at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)  
  76.     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)  
  77.     at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)  
  78.     at org.eclipse.jetty.server.Server.doStart(Server.java:282)  
  79.     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)  
  80.     at net.sourceforge.eclipsejetty.starter.embedded.JettyEmbeddedAdapter.start(JettyEmbeddedAdapter.java:67)  
  81.     at net.sourceforge.eclipsejetty.starter.common.AbstractJettyLauncherMain.launch(AbstractJettyLauncherMain.java:84)  
  82.     at net.sourceforge.eclipsejetty.starter.embedded.JettyEmbeddedLauncherMain.main(JettyEmbeddedLauncherMain.java:42)  
  83. Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor]: Factory method ‘asyncAdvisor‘ threw exception; nested exception is java.lang.IllegalArgumentException: @EnableAsync annotation metadata was not injected  
  84.     at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)  
  85.     at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)  
  86.     ... 28 more  
  87. Caused by: java.lang.IllegalArgumentException: @EnableAsync annotation metadata was not injected  
  88.     at org.springframework.util.Assert.notNull(Assert.java:112)  
  89.     at org.springframework.scheduling.annotation.ProxyAsyncConfiguration.asyncAdvisor(ProxyAsyncConfiguration.java:45)  
  90.     at org.springframework.scheduling.annotation.ProxyAsyncConfiguration
    EnhancerBySpringCGLIBEnhancerBySpringCGLIB
    82eb591.CGLIB$asyncAdvisor$0(<generated>)  
  91.     at org.springframework.scheduling.annotation.ProxyAsyncConfiguration
    EnhancerBySpringCGLIBEnhancerBySpringCGLIB
    82eb591
    FastClassBySpringCGLIBFastClassBySpringCGLIB
    ed8c37b9.invoke(<generated>)  
  92.     at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)  
  93.     at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:309)  
  94.     at org.springframework.scheduling.annotation.ProxyAsyncConfiguration
    EnhancerBySpringCGLIBEnhancerBySpringCGLIB
    82eb591.asyncAdvisor(<generated>)  
  95.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  96.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)  
  97.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
  98.     at java.lang.reflect.Method.invoke(Method.java:606)  
  99.     at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)  
  100.     ... 29 more  
错误原因:

 

在spring的配置文件applicationContext.xml中, 配置包扫描器时, 使用了*, 想扫描所有的包; 而这种方式有可能扫描到spring自带的包, 造成错误(自我理解, 不对的话求教育)

改动前:

 

[html] view plain copy
 
  1. <!-- 包扫描器 -->  
  2. <context:component-scan base-package="*"/>  
改动后(具体指定了要扫描的包):

 

 

[html] view plain copy
 
  1. <!-- 包扫描器 -->  
  2. <context:component-scan base-package="com.git.*"/>  

以上是关于@EnableAsync annotation metadata was not injected Spring容器启动后访问Servlet报错的主要内容,如果未能解决你的问题,请参考以下文章

任务管理(异步任务定时任务发送邮件)

任务管理(异步任务定时任务发送邮件)

springboot中@EnableAsync与@Async注解使用

@EnableAsync@Async使用总结

Spring Boot 异步任务 -- @EnableAsync 详解

SpringBoot EnableAsync无效 Async注解不异步