假设我有一个类MailConsoleService和一个类MailSMTPService,都实现了MailService接口。我有一个EmailJob类,它从数据库加载用户并通过Spring注入的MailService实例发送电子邮件。

如何读取属性并在运行时确定要注入的MailService实现?显然,该属性可以在应用程序运行时随时更改。

我曾考虑过创建一个工厂bean,该工厂bean将正确的实例从spring容器返回到EmailJob,但是我不知道如何实现它。

注意:我所有的bean都配置为Singleton范围,所以我想至少必须更改为Prototype EmailJob

注意2:如何在工厂bean中避免每次都读取属性文件?

谢谢!

最佳答案

您可以执行以下操作:

@Component
public class Factory {

@Autowired
private MailService mailConsoleService;

@Autowired
private MailService mailSmtpService;

@Value("${mailServiceProperty}")
private String mailServiceProperty;

public MailService getMailService() {
    switch (mailServiceProperty) {
    case "CONSOLE":
        return mailConsoleService;

    case "SMTP":
        return mailSmtpService;
    }
    return null;
}


}

另外,您需要使用PropertyPlaceholderConfigurer注入属性

关于java - 在运行时读取属性文件以注入(inject)bean,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31281003/

10-10 17:47