gpt4 book ai didi

java - 无法使用 spring 电子邮件

转载 作者:行者123 更新时间:2023-11-29 04:24:09 26 4
gpt4 key购买 nike

我正在尝试实现一个 spring 电子邮件服务,我为其实现了 GOOF 设计模式。我创建了一个接口(interface)电子邮件服务,如下所示。

公共(public)接口(interface)电子邮件服务{

public void sendFeedbackEmail(FeedbackPojo feedbackPojo);

public void sendGenericEmailMessage(SimpleMailMessage message);

然后我创建了一个抽象类,它扩展了这个接口(interface)并实现了它的一个重写方法,即 sendFeedbackEmail(FeedBackPojo feedbackpojo) 这个抽象类的实现如下。

public abstract class AbstractEmailService implements EmailService {

@Value("@{default.to.address}")
private String defaultToAddress ;

protected SimpleMailMessage preparedSimpleMailMessageFromFeedbackPojo(FeedbackPojo feedback){
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(defaultToAddress);
message.setFrom(feedback.getEmail());
message.setSubject("[Subscriber]: Feedback Received from"+ feedback.getFirstName()+" "+feedback.getLastName()+"!");
message.setText(feedback.getFeedback());

return message;
}

@Override
public void sendFeedbackEmail(FeedbackPojo feedbackPojo) {
sendGenericEmailMessage(preparedSimpleMailMessageFromFeedbackPojo(feedbackPojo));
}

然后我创建了一个 MockEmailService 类,实现了 EmailService 接口(interface)的第二个方法,即 sendGenericEmail(SimpleMailMessage message),如下所示

公共(public)类 MockEmailService 扩展了 AbstractEmailService{

private static final Logger log = 
LoggerFactory.getLogger(MockEmailService.class);

@Override
public void sendGenericEmailMessage(SimpleMailMessage message) {
System.out.println(message.toString());
}

然后我在我的 Controller 类中创建一个 emailService 的 Autowiring 对象,并如下模拟我的电子邮件服务

@Controller

公共(public)类 ContactController {

private static final org.slf4j.Logger log = LoggerFactory.getLogger(ContactController.class);
public static final String FEEDBACK_MODEL_KEY="feedback";
private static final String CONTACT_US_VIEW_NAME="contact/contact";

@Autowired
private EmailService emailService;


@RequestMapping(value = "/contact",method = RequestMethod.GET)
public String getContact(ModelMap model){
FeedbackPojo feedbackPojo = new FeedbackPojo();
model.addAttribute(ContactController.FEEDBACK_MODEL_KEY,feedbackPojo);
return ContactController.CONTACT_US_VIEW_NAME;
}

@RequestMapping(value = "/contact",method = RequestMethod.POST)
public String postContact(@ModelAttribute(FEEDBACK_MODEL_KEY) FeedbackPojo feedback){
log.debug("Feedback content {}",feedback);
emailService.sendFeedbackEmail(feedback);
return ContactController.CONTACT_US_VIEW_NAME;
}

但是,当我尝试运行我的应用程序时,应用程序终止并且我收到的错误如下所示

org.springframework.beans.factory.BeanCreationException:创建名为“contactController”的 bean 时出错:注入(inject) Autowiring 的依赖项失败;嵌套的异常是 org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.subscriptionservice.backend.service.EmailService com.subscriptionservice.web.controllers.ContactController.emailService;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为 [com.subscriptionservice.backend.service.EmailService] 的符合条件的 bean 依赖项:预计至少有 1 个 bean 有资格作为此依赖项的 Autowiring 候选者。依赖注解:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

有人可以指出我实现中的问题吗?谢谢。

最佳答案

No qualifying bean of type [com.subscriptionservice.backend.service.EmailService] found for dependency

据我所知,您还没有将接口(interface) EmailService 的实例引入到 Spring 管理的 bean 集合中。

尝试使用 @Service 注释(刻板印象)MockEmailService

还有...

  • 确保您在某处定义了 component-scan,其中包含 MockEmailService 所在的包。
  • 您是否打算让 MockEmailService 在您的应用程序中永久实现 EmailService 的契约? (根据名称,我不会这么猜。)如果 MockEmailService 仅用于某些情况——例如非生产部署或测试——你可能需要一个更灵活的系统来定义或连接你的 bean 。有很多选项,比如Spring Profiles .

关于java - 无法使用 spring 电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47292511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com