2017-01-09 23 views
0

私のアプリケーションでHTMLメール送信者を作成しようとしましたが、このエラーが発生しました。フィールドをautowireできませんでした:private org.springframework.mail.javamail.JavaMailSender [Spring 4.0.0 REALEASE]

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:property-placeholder location="classpath*:/mail_server.properties" /> 
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSender"> 
     <property name="host" value="${host}"/> 
     <property name="port" value="${port}"/> 
     <property name="username" value="${username}"/> 
     <property name="password" value="${password}"/> 
     <property name="javaMailProperties"> 
      <props> 
       <prop key="mail.transport.protocol">smtp</prop> 
       <prop key="mail.smtp.auth">true</prop> 
       <prop key="mail.smtp.starttls.enable">true</prop> 
       <prop key="mail.debug">true</prop> 
      </props> 
     </property> 
    </bean> 
</beans> 

次に、私はそれをSpringプロジェクトのapplicationContext.xmlファイルにインポートしました。 Javaクラスでは、単にHTMLメールを送信するメソッドを記述します。

import java.io.UnsupportedEncodingException; 
import java.util.Date; 

import javax.inject.Inject; 
import javax.mail.MessagingException; 
import javax.mail.internet.MimeMessage; 

import org.springframework.mail.MailException; 
import org.springframework.mail.SimpleMailMessage; 
import org.springframework.mail.javamail.JavaMailSender; 
import org.springframework.mail.javamail.MimeMessageHelper; 
import org.springframework.stereotype.Repository; 

import fi.vietjob.bean.mail.Mail; 

@Repository 
public class mailFeature { 
    @Inject 
    private JavaMailSender mailSender; 

    public JavaMailSender getMailSender() { 
     return mailSender; 
    } 

    public void setMailSender(JavaMailSender mailSender) { 
     this.mailSender = mailSender; 
    } 

    public void getPalaute(Mail mail, String to) { 
     SimpleMailMessage message = new SimpleMailMessage(); 
     message.setSubject(mail.getSubject()); 
     message.setText(mail.getText()); 
     message.setFrom(mail.getFrom()); 
     message.setSentDate(new Date()); 
     mailSender.send(message); 
    } 

    public void sendHTMLEmail(Mail mail, String to, String senderName) { 

     try { 
      MimeMessage mime = mailSender.createMimeMessage(); 
      MimeMessageHelper helper = new MimeMessageHelper(mime, true); 
      helper.setFrom(mail.getFrom(), senderName); 
      helper.setText(mail.getText()); 
      helper.setSubject(mail.getSubject()); 
      helper.setSentDate(new Date()); 
      helper.setTo(to); 
      mailSender.send(mime); 
     } catch (MailException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (MessagingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 

と私はそれを実行したとき、私はstackstraceだ:あなたはこのように、メールの送信者を作成したXMLファイルで

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mailFeature': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.mail.javamail.JavaMailSender fi.vietjob.feature.mailFeature.mailSender; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.mail.javamail.JavaMailSender] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.inject.Inject()} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:643) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:606) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:657) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:525) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:466) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1241) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1154) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1041) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4969) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5255) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
+0

便利願っていますが、Autowired注釈の代わりに注入する注釈を試してみました? – Alee

+0

私はそれが同じ仲間だと思って、ちょうど試してもそれはまだ動作していない! –

+0

あなたのbean定義に 'autowire =" byName "'を追加してみてください。 '@ Autowired'を使用してください –

答えて

1

を:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSender"> 
    <property name="host" value="${host}"/> 
    <property name="port" value="${port}"/> 
    <property name="username" value="${username}"/> 
    <property name="password" value="${password}"/> 
    <property name="javaMailProperties"> 
     <props> 
      <prop key="mail.transport.protocol">smtp</prop> 
      <prop key="mail.smtp.auth">true</prop> 
      <prop key="mail.smtp.starttls.enable">true</prop> 
      <prop key="mail.debug">true</prop> 
     </props> 
    </property> 
</bean> 

ので、春には、Beanを作成しますIDがmailSender リポジトリに注入しようとすると、単に@Injectを使用します。だから、書いてみる@Inject@Qualifier

を使用しよう:

@Repository 
public class mailFeature { 
    @Inject 
    @Qualifier("mailSender") 
    private JavaMailSender mailSender; 
.... 
} 

それは

を動作するはずです、私はそれが

アンジェロ

+0

おかげで、私は仕事から復帰し、あなたに知らせるときに私は試してみるよ。 –

+0

これはうまく動いています。私はurガイドに従っており、JavaMailSenderImplの代わりにJavaMailSenderも変更しています。しかし、私は本当に理解していない、あなたは私のために説明することができます。私が知っているように、修飾子注釈は、同じ型を持つBean以上のものがある場合にのみ使用されますが、私のアプリケーションではJavaMailSenderだけを宣言しますか? –

+0

あなたのXMLファイルで、あなたは 'mailSender'というIDのBeanを宣言しました。 '@Inject'や' @ Autowired'を '@ Qualifier'の指定なしで使うと、bean名にid.eqaualsのBeanが検索されます。あなたのケースでは、idが 'javaMailSender'で、' mailSender'がないbeanを検索します –

関連する問題