我在appconfig中注册了以下的bean。如何在我的服务中使用构造函数注入来使用这个bean?我需要动态传递用户ID,密码。
@Bean
public JavaMailSender getMailSender(JavaMailerDTO javaMailer){
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setJavaMailProperties(mailProperties(javaMailer));
mailSender.setHost(javaMailer.getHost());
mailSender.setUsername(javaMailer.getEmailId());
mailSender.setPassword(javaMailer.getEmailPassword());
mailSender.setPort(Integer.parseInt(javaMailer.getPort()));
return mailSender;
}
private Properties mailProperties(JavaMailerDTO javaMailer){
Properties properties = new Properties();
properties.put(ApplicationConstant.MAIL_AUTH, ApplicationConstant.TRUE);
// .....
properties.put(ApplicationConstant.MAIL_SMTPPORT,javaMailer.getPort());
return properties;
}
你能帮我用上面的bean自动装配发送电子邮件吗?
答案 0 :(得分:0)
我建议您创建一个工厂,为您构建一个单独的实例JavaMailSender
以获取不同的凭据。
这样的事情:
public interface MailSenderFactory {
JavaMailSender getSender(String email, String password);
}
@Component
public static class MailSenderFactoryImpl implements MailSenderFactory {
private final JavaMailerDTO javaMailer;
@Autowired
public MailSenderFactoryImpl(JavaMailerDTO javaMailer) {
this.javaMailer = javaMailer;
}
@Override
public JavaMailSender getSender(final String email, final String password) {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setJavaMailProperties(mailProperties(javaMailer));
mailSender.setHost(javaMailer.getHost());
mailSender.setUsername(email);
mailSender.setPassword(password);
mailSender.setPort(Integer.parseInt(javaMailer.getPort()));
return mailSender;
}
private Properties mailProperties(JavaMailerDTO javaMailer) {
Properties properties = new Properties();
properties.put(ApplicationConstant.MAIL_AUTH, ApplicationConstant.TRUE);
// .....
properties.put(ApplicationConstant.MAIL_SMTPPORT, javaMailer.getPort());
return properties;
}
}
现在您可以像这样使用它:
@Service
public static class MailService {
private final MailSenderFactory mailSenderFactory;
public MailService(MailSenderFactory mailSenderFactory) {
this.mailSenderFactory = mailSenderFactory;
}
public void sendMail() {
JavaMailSender mailSender = mailSenderFactory.getSender("john.smith@gmail.com", "123456");
mailSender.send(...);
}
}