私はGOOFデザインパターンを実装したSpring電子メールサービスを実装しようとしています。私は次のようにインタフェースの電子メールサービスを作成しました。spring emailが動作しない
パブリックインターフェースEmailService {
public void sendFeedbackEmail(FeedbackPojo feedbackPojo);
public void sendGenericEmailMessage(SimpleMailMessage message);
}
そして私はこのインタフェースを拡張し、それは次のように、この抽象クラスの実装である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がAbstractEmailService {
を拡張し、以下のようにIはsendGenericEmail(SimpleMailMessageメッセージ)であるEmailServiceインタフェースの第2の方法の実装とクラスMockEmailServiceを作成private static final Logger log =
LoggerFactory.getLogger(MockEmailService.class);
@Override
public void sendGenericEmailMessage(SimpleMailMessage message) {
System.out.println(message.toString());
}
}
私がしようとすると、は、その後、私は、私のコントローラクラスにemailServiceのAutowiredオブジェクトを作成し、しかし
@Controller
パブリッククラス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;
}
}
を次のように私のemailserviceをシミュレートしています私のアプリケーションを実行すると、アプリケーションは終了し、エラーは次のようになります。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'contactController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.subscriptionservice.backend.service.EmailService com.subscriptionservice.web.controllers.ContactController.emailService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.subscriptionservice.backend.service.EmailService] 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)}
私の実装で誰かが問題を指摘できますか?ありがとう。
ありがとうございました。これは、MockEmailServiceに注釈を付けた後に機能します。はい、MockEmailServiceは実稼働環境以外の展開用です。私は別の春のプロファイルを維持しています。 –