假设我有一个类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/