【发布时间】:2014-04-23 14:08:54
【问题描述】:
我在尝试运行我的应用程序时遇到了以下问题。已经调试了一切,但仍然没有。
IDE 正在毫无问题地找到 bean,所以我对这里发生的事情感到非常困惑。
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 'mailManager': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.testmail.app.service.implement.CustomMManagerService.setMailSender(org.springframework.mail.javamail.JavaMailSender); 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: {}
我的 bean 生成位于以下文件中:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.testmail.app")
public class WebConfig extends WebMvcConfigurerAdapter {
//CODE CODE CODE
@Bean
public JavaMailSenderImpl mailSender() {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setProtocol("SMTP");
javaMailSender.setHost("127.0.0.1");
javaMailSender.setPort(25);
return javaMailSender;
}
// CODE CODE CODE
}
CustomMManager 的代码:
public interface CustomMManager extends Serializable {
void sendMail(String mailFrom,String mailTo,String subject,String mailBody);
}
最后是 CustomMManagerService 的代码:
@Service("mailManager")
public class CustomMManagerService implements CustomMManager {
private JavaMailSender mailSender;
@Autowired
public void setMailSender(JavaMailSender mailSender) {
this.mailSender = mailSender;
}
@Override
public void sendMail(final String mailFrom, final String mailTo, final String subject, final String mailBody) {
try {
mailSender.send(new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage)
throws Exception {
MimeMessageHelper message = new MimeMessageHelper(mimeMessage,
false, "UTF-8");
message.setFrom(mailFrom);
message.addTo(mailTo);
message.setSubject(subject);
message.setText(mailBody, true);
}
});
} catch (MailSendException e) {
// your codes;
}
}
}
非常感谢您的帮助。
【问题讨论】:
-
你可以试试
public JavaMailSender mailSender() -
WebConfig 中声明的其他 bean 是否工作?
-
包com.testmail.app下的bean都是?另外,您说 ide 找到了 bean。您是否在 ide 的单元测试中运行它并且一切正常?如果你在 webapp 中运行它,你是如何加载 WebConfig 的?是通过xml还是使用WebApplicationInitializer。
-
public JavaMailSender mailSender() 是我采取的第一个故障排除步骤之一。不工作。 WebConfig 中的所有其他 bean 都可以正常工作。我不使用 XML,所有内容都有注释,所以是 WebApplicationInitializer。
-
尝试在 Root 上下文中移动您的 bean 声明,而不是在 servlet 上下文中。我认为您的服务是在 Root 上下文中声明的。我说的对吗?
标签: java spring spring-mvc