2014-01-13 102 views
6

RegistrationService@Autowired registrationDaoregisterCustomer工作正常。 但它不能自動連線ActivationMailService彈簧自動裝夾異常(無法自動裝入字段..)

我沒有發現問題。當我在RegistrationService中刪除ActivationMailService時,它可以正常工作。有誰能告訴我請問我的代碼中有什麼問題?

我已上載該項目http://www.mediafire.com/?baum85us0rmmue3

當我運行該應用程序我得到下面這個錯誤:

Hibernate: drop table if exists Customer 
ERROR: org.springframework.web.context.ContextLoader - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'activationMailServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected com.game.portal.utils.SendMail com.game.portal.services.impl.ActivationMailServiceImpl.sendMail; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sendMail': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.springframework.mail.javamail.JavaMailSenderImpl com.game.portal.utils.SendMail.mailSender; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.mail.javamail.JavaMailSenderImpl] 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:289) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1146) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    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: protected com.game.portal.utils.SendMail com.game.portal.services.impl.ActivationMailServiceImpl.sendMail; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sendMail': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.springframework.mail.javamail.JavaMailSenderImpl com.game.portal.utils.SendMail.mailSender; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.mail.javamail.JavaMailSenderImpl] 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:517) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286) 
    ... 22 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sendMail': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.springframework.mail.javamail.JavaMailSenderImpl com.game.portal.utils.SendMail.mailSender; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.mail.javamail.JavaMailSenderImpl] 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:289) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1146) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:912) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:855) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:489) 
    ... 24 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.springframework.mail.javamail.JavaMailSenderImpl com.game.portal.utils.SendMail.mailSender; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.mail.javamail.JavaMailSenderImpl] 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:517) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286) 
    ... 35 more 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.mail.javamail.JavaMailSenderImpl] 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:988) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:858) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:489) 
    ... 37 more 
Jan 14, 2014 11:45:14 AM org.apache.catalina.core.StandardContext listenerStart 
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 'activationMailServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected com.game.portal.utils.SendMail com.game.portal.services.impl.ActivationMailServiceImpl.sendMail; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sendMail': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.springframework.mail.javamail.JavaMailSenderImpl com.game.portal.utils.SendMail.mailSender; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.mail.javamail.JavaMailSenderImpl] 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:289) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1146) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    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: protected com.game.portal.utils.SendMail com.game.portal.services.impl.ActivationMailServiceImpl.sendMail; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sendMail': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.springframework.mail.javamail.JavaMailSenderImpl com.game.portal.utils.SendMail.mailSender; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.mail.javamail.JavaMailSenderImpl] 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:517) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286) 
    ... 22 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sendMail': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.springframework.mail.javamail.JavaMailSenderImpl com.game.portal.utils.SendMail.mailSender; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.mail.javamail.JavaMailSenderImpl] 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:289) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1146) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:912) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:855) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:489) 
    ... 24 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.springframework.mail.javamail.JavaMailSenderImpl com.game.portal.utils.SendMail.mailSender; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.mail.javamail.JavaMailSenderImpl] 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:517) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286) 
    ... 35 more 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.mail.javamail.JavaMailSenderImpl] 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:988) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:858) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:489) 
    ... 37 more 

管理豆:

package com.game.portal.managedbeans; 

import java.io.Serializable; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ManagedProperty; 
import javax.faces.bean.ViewScoped; 

import com.game.portal.entities.Customer; 
import com.game.portal.services.RegistrationService; 

@ViewScoped 
@ManagedBean 
public class CustomerBean implements Serializable { 

    private static final long serialVersionUID = 7291708796066664438L; 

    @ManagedProperty(value="#{registrationService}") 
    RegistrationService registrationService; 

    Customer customer = new Customer(); 

    public void registerCustomer(){ 
     customer.setName("xxx"); 
     customer.setSurname("xxx"); 
     customer.setUsername("xxx"); 
     customer.setEmail("[email protected]"); 
     customer.setPassword("xxxx"); 

     registrationService.registerCustomer(customer); 

    } 

    public Customer getCustomer() { 
     return customer; 
    } 

    public void setCustomer(Customer customer) { 
     this.customer = customer; 
    } 

    public RegistrationService getRegistrationService() { 
     return registrationService; 
    } 

    public void setRegistrationService(RegistrationService registrationService) { 
     this.registrationService = registrationService; 
    } 

} 

這裏是RegistrationService

package com.game.portal.services; 

import javax.faces.application.FacesMessage; 
import javax.faces.context.FacesContext; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 

import com.game.portal.dao.RegistrationDao; 
import com.game.portal.entities.Company; 
import com.game.portal.entities.Customer; 

@Service 
public class RegistrationService { 

    @Autowired 
    RegistrationDao registrationDao; 

    @Autowired 
    ActivationMailService activationMailService; 

    public void registerCustomer(Customer customer) { 

     System.out.println("RegistrationUserBean:: Registering user " + customer.getName() + " " + customer.getUsername() + ", with email " + customer.getEmail()); 
     registrationDao.registerCustomer(customer); 
     activationMailService.sendActivationMail(customer); 

     FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Registration success", "success"); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 

    public void registerCompany(Company company) { 

     System.out.println("RegistrationUserBean:: Registering user " + company.getName() + " " + company.getUsername() + ", with email " + company.getEmail()); 
     registrationDao.registerCompany(company); 

     FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Registration success", "success"); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 

} 

ActivationMailService

注:我測試了SendMailHashMapEmailTemplateService去除@Autowired。有用。 ActivationCodeService上的@Autowired沒有問題。這真的很奇怪。

package com.game.portal.services; 

import java.io.UnsupportedEncodingException; 
import java.net.URLEncoder; 
import java.util.HashMap; 

import org.apache.log4j.Logger; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 
import com.game.portal.entities.Customer; 
import com.game.portal.utils.SendMail; 

@Service 
public class ActivationMailService { 

    @Autowired 
    protected ActivationCodeService activationCodeService; 
    @Autowired 
    protected SendMail sendMail; 
    @Autowired 
    protected HashMap<String, String> emailMap; 
    @Autowired 
    private EmailTemplateService mailTemplateService; 

    protected static final Logger logger = Logger.getLogger("ActivationMailService"); 

    public void sendActivationMail(Customer customer) { 
     try { 
      sendMail.send("test", "test", customer.getEmail(), createActivationMailMessage(customer)); 
     } catch (UnsupportedEncodingException e) { 
      logger.error(e.getMessage(), e); 
     } 
    } 

    private String createActivationMailMessage(Customer customer) throws UnsupportedEncodingException { 
     String emailTemplate = mailTemplateService.generateTemplate("activation", emailMap.get("domain_name")); 

     return emailTemplate; 
    } 
} 

SendMail.class

import java.util.ArrayList; 
import java.util.HashMap; 

import javax.activation.FileDataSource; 
import javax.mail.internet.MimeMessage; 

import org.apache.log4j.Logger; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Lazy; 
import org.springframework.context.annotation.Scope; 
import org.springframework.mail.javamail.JavaMailSenderImpl; 
import org.springframework.mail.javamail.MimeMessageHelper; 
import org.springframework.stereotype.Service; 

@Lazy(true) 
@Scope("singleton") 
@Service 
public class SendMail { 

    private static Logger logger = Logger.getLogger(SendMail.class); 

    @Autowired 
    JavaMailSenderImpl mailSender; 

    @Autowired 
    private HashMap<String, String> emailMap; 

    public boolean send(String subject, String from, String[] to, String message) { 
     boolean sendSuccessfull = true; 

     MimeMessage mailMessage = mailSender.createMimeMessage(); 
     MimeMessageHelper helper = new MimeMessageHelper(mailMessage, "UTF-8"); 
     try { 
      helper.setFrom(from, emailMap.get("fromName")); 
      helper.setTo(to); 
      helper.setSubject(subject); 
      helper.setText(message, true); 
      mailSender.send(mailMessage); 
      logger.warn("SEND MAIL TO : " + to + " WITH SUBJECT " + subject 
       + " OK "); 
     } catch (Exception e) { 
      logger.error(e.getMessage(), e); 
      sendSuccessfull = false; 
     } 

     return sendSuccessfull; 
    } 

    public boolean send(String subject, String from, String to, String message) { 
     boolean sendSuccessfull = true; 

     MimeMessage mailMessage = mailSender.createMimeMessage(); 
     MimeMessageHelper helper = new MimeMessageHelper(mailMessage, "UTF-8"); 
     try { 
      helper.setFrom(from, emailMap.get("fromName")); 
      helper.setTo(to); 
      helper.setSubject(subject); 
      helper.setText(message, true); 
      mailSender.send(mailMessage); 
      logger.warn("SEND MAIL TO : " + to + " WITH SUBJECT " + subject 
       + " OK "); 
     } catch (Exception e) { 
      logger.error(e.getMessage(), e); 
      sendSuccessfull = false; 
     } 

     return sendSuccessfull; 
    } 

    public boolean send(String subject, String from, String[] to, String[] cc, String message) { 
     boolean sendSuccessfull = true; 

     MimeMessage mailMessage = mailSender.createMimeMessage(); 
     MimeMessageHelper helper = new MimeMessageHelper(mailMessage, "UTF-8"); 
     try { 
      helper.setFrom(from, emailMap.get("fromName")); 
      helper.setTo(to); 
      helper.setCc(cc); 
      helper.setSubject(subject); 
      helper.setText(message, true); 
      mailSender.send(mailMessage); 
      logger.warn("SEND MAIL TO : " + to + " WITH SUBJECT " + subject 
       + " OK "); 
     } catch (Exception e) { 
      logger.error(e.getMessage(), e); 
      sendSuccessfull = false; 
     } 

     return sendSuccessfull; 
    } 

    public boolean send(String subject, String from, String to, String cc, String message) { 
     boolean sendSuccessfull = true; 

     MimeMessage mailMessage = mailSender.createMimeMessage(); 
     MimeMessageHelper helper = new MimeMessageHelper(mailMessage, "UTF-8"); 
     try { 
      helper.setFrom(from, emailMap.get("fromName")); 
      helper.setTo(to); 
      helper.setCc(cc); 
      helper.setSubject(subject); 
      helper.setText(message, true); 
      mailSender.send(mailMessage); 
      logger.warn("SEND MAIL TO : " + to + " WITH SUBJECT " + subject 
       + " OK "); 
     } catch (Exception e) { 
      logger.error(e.getMessage(), e); 
      sendSuccessfull = false; 
     } 

     return sendSuccessfull; 
    } 

    public boolean send(String subject, String from, String[] to, String[] cc, 
     String message, ArrayList<String> attachmentfilenamelist, 
     ArrayList<String> attachmentfilewithpathlist) { 
     boolean sendSuccessfull = true; 

     MimeMessage mailMessage = mailSender.createMimeMessage(); 
     MimeMessageHelper helper; 
     try { 
      helper = new MimeMessageHelper(mailMessage, true, "UTF-8"); 
      helper.setFrom(from, emailMap.get("fromName")); 
      helper.setTo(to); 
      helper.setCc(cc); 
      helper.setSubject(subject); 
      helper.setText(message, true); 
      for (int i = 0; i < attachmentfilenamelist.size(); i++) { 
      helper.addAttachment(attachmentfilenamelist.get(i), 
       new FileDataSource(attachmentfilewithpathlist.get(i))); 
      } 
      mailSender.send(mailMessage); 
      logger.warn("SEND MAIL TO : " + to + " WITH SUBJECT " + subject 
       + " OK "); 
     } catch (Exception e) { 
      logger.error(e.getMessage(), e); 
      sendSuccessfull = false; 
     } 

     return sendSuccessfull; 
    } 

    public boolean sendFromUser(String subject, String from, String fromName, String []to, String message) { 
     boolean sendSuccessfull = true; 

     MimeMessage mailMessage = mailSender.createMimeMessage(); 
     MimeMessageHelper helper = new MimeMessageHelper(mailMessage, "UTF-8"); 
     String toAdresses = ""; 
     for (int i = 0; i < to.length; i++) { 
      if(i == 0) 
       toAdresses = to[i]; 
      else 
       toAdresses = toAdresses + ", " + to[i]; 
     } 
     try { 
      helper.setFrom(from, fromName); 
      helper.setTo(to); 
      helper.setSubject(subject); 
      helper.setText(message, true); 
      mailSender.send(mailMessage); 
      logger.warn("SEND MAIL TO : " + toAdresses + " WITH SUBJECT " + subject 
       + " OK "); 
     } catch (Exception e) { 
      logger.error(e.getMessage(), e); 
      sendSuccessfull = false; 
     } 

     return sendSuccessfull; 
    } 
} 
+1

您可能希望將日誌級別設置爲DEBUG或更低找出原因Spring不會創建你的bean。我也沒有在'ActivationMailService'中看到'import org.springframework.stereotype.Service;',但你確實使用了這個註解。你是否只添加到這篇文章?如果是這樣,那就是爲什麼它不起作用。 –

+1

我覺得還有更多的NoSuchBeanException。沒有完整的堆棧跟蹤是不可能的。但是,您的ActivationService中的HashMap上存在可疑的@Autowired註釋。該自動佈線註釋很可能表現出與您預期不同的行爲。那個定義在哪裏? – hyness

+0

@Giovanni,它是複製粘貼錯誤。我添加了導入org.springframework.stereotype.Service。這不是錯誤的原因。 – user1662738

回答

7

基於例外:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.mail.javamail.JavaMailSenderImpl] 

似乎春天找不到豆注入到

@Autowired 
JavaMailSenderImpl mailSender; 

SendMail類。

您確定定義了JavaMailSenderImpl類的bean嗎?

順便說一句實現類直接注入(而不是它的接口)有點不尋常。

+0

我改變了它,但仍然是相同的錯誤; @Autowired JavaMailSender mailSender; – user1662738

+0

@ user1662738但是您是否檢查是否有定義實現'JavaMailSender'的bean?我在您發佈的代碼中看不到任何內容。 –

+1

剛剛有一個類似的問題 - 這是因爲我試圖自動調用實現而不是接口。我認爲使用@Transactional註解Spring會創建代理,這樣你就不總是擁有你認爲自己擁有的東西。切換到自動裝配接口爲我解決它。 – pauli

1

在服務類中的方法應該在你的自動裝配Autowired類進行註釋@Transactional

+0

如果這個類已經用@Transactional註解,那麼這個方法並不重要。 – Lobato

0

寫@Service(「sendmail的」)

相關問題