2016-07-03 6 views
0

Я написал одну почтовую утилиту для своего проекта. Теперь, когда я пытаюсьОшибка при создании bean-компонента

@Autowired 
EmailManager emailManager 

от моего UserController Я получаю ошибку о том, что компонент не может быть создан. здесь я отображая код, написанный в классе EmailManager

@Component 
public class EmailManager { 
    @Autowired 
    ApplicationContext appContext; 

    @Autowired 
    ThreadPoolTaskExecutor taskExecutor; 

    public Logger logger = Logger.getLogger(EmailManager.class); 

    public boolean sendChangePasswordNotification(String password,UserVO userVo) throws Exception{ 
     try { 
      logger.info("Send change password notification to " + userVo.getEmailId()); 

      String cc = PropertyUtil.getProperty("cc"); 
      logger.info("cc:"+cc); 

      HashMap<String,String> replaceKeyValue = new HashMap<String,String>(); 
      replaceKeyValue.put("username", userVo.getUsername()); 
      replaceKeyValue.put("password", password); 
      replaceKeyValue.put("firstName", userVo.getFirstName()); 

      HashMap<String,String> recipientMap = new HashMap<String,String>(); 
      recipientMap.put("to", userVo.getEmailId()); 
      recipientMap.put("cc", cc); 

      MailThread sender1 = (MailThread) appContext.getBean(MailThread.class); 
      sender1.setEmailOption(Constants.SEND_CHANGE_PASSWORD_NOTIFICATION); 
      sender1.setRecipientDetails(recipientMap); 
      sender1.setReplaceKeyValue(replaceKeyValue); 

      taskExecutor.execute(sender1); 
      logger.info("Sent change password notification to " + userVo.getEmailId()); 
     } catch (Exception e) { 
      logger.error("Error", e); 
      throw e; 
     } 
     return true; 
    } 
} 

А вот полный стек след, который я получил на консоли Eclipse:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emailManager': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor com.isynergy.tasktrac.notification.EmailManager.taskExecutor; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:326) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1204) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:725) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4772) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5196) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor com.isynergy.tasktrac.notification.EmailManager.taskExecutor; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:542) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:323) 
    ... 22 more 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1261) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1009) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:904) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:514) 

Как я могу решить эту проблему любое предложение?

ответ

1

EmailManager не может быть создан, так как он объявил зависимость для ThreadPoolTaskExecutor, и в контексте приложения нет соответствующих фасонов этого типа. Вам необходимо создать компонент приложения ThreadPoolTaskExecutor в контексте приложения.

+0

Woaah, Amazing ... Это решило мою проблему .. Спасибо .. !! – Vish