我创建了一个名为email-util.jar的实用程序jar文件。该实用程序的主要目的是通过Amazon SES或Gmail SMTP发送电子邮件。我使用工厂模式来决定电子邮件的类型。 (电子邮件util.jar将在多个项目中使用)如何覆盖java变量并将变量设置为必填字段
EmailService.java(接口)
public Status sendEmail(Email emailVO)
实现亚马逊SES
public class AmazonSimpleEmailServiceImpl implements EmailService {
public Status sendEmail(Email emailVO)
{
Amazon related stuff
}
执行情况的Gmail
public class GmailServiceImpl implements EmailService {
public Status sendEmail(Email emailVO)
{
Gmail related stuff
}
EmailVO将有ToAddress,FromAddress ... ..所有电子邮件相关的信息驻留在EmailVO。 使用工厂模式我能够创建AWS或Gmail的对象并成功发送电子邮件。
现在我已经在其相应的实现中对亚马逊SES和Gmail的所有配置进行了硬编码。亚马逊和Gmail的配置信息有点不同。
的Gmail
- SMPT主机
- SMTP端口 ...
亚马逊SES
- awsAccessKey
- awsSecretKey
- 区域
- connectionTimeout
- MAXCONNECTIONS
- 了socketTimeout
- maxErrorRetry ...。
但我不希望配置信息被硬编码。我为sendEmail方法引入了一个附加参数。
public Status sendEmail(Email emailVO, EmailConfig config)
EmailConfig是一个简单的bean,我有整个亚马逊和gmail相关的变量。一切工作正常。但我有一些顾虑
Quesions
- 有没有我们可以分开亚马逊SES配置和Gmail的相关配置的一种方式。
- 还有一个问题是用户不知道哪些变量是必需的,哪些变量是可选的。即如果用户选择gmail,则Region是可选的。如何解决这个问题
- 这解决了这个问题
我试图创建一个名为EmailConfig一个标记接口,并创建了执行EmailConfig两个班的任何设计模式。
AmazonSESConfig implements EmailConfig
amazonSES related variables.
GmailConfig implements EmailConfig
gmail related variables.
但它没有奏效。由于它是标记界面,因此无法将Email中的AmazonSES/Gmail的对象存储在EmailConfig中。
从阅读'override'和'core'标签的描述,我不认为这些标签在这里是适当的。 – CollinD
如果用户不知道正在使用哪个服务,并且该服务不控制正在创建的“Email”实例,则所需字段是所有必填字段的联合。没有别的可能的工作。 –