【发布时间】:2015-07-07 23:15:32
【问题描述】:
假设我有一个类MailConsoleService 和一个类MailSMTPService,它们都实现了MailService 接口。我有一个 EmailJob 类,它从数据库加载用户并通过 Spring 注入的 MailService 实例发送电子邮件。
我如何读取属性并在运行时确定要注入 MailService 的哪个实现?显然,这些属性可能会在应用程序运行时随时更改。
我考虑过创建一个工厂 bean,它将正确的实例从 spring 容器返回到 EmailJob,但我不知道如何实现。
注意:我所有的 bean 都配置为 Singleton 范围,所以我想我至少必须更改为 Prototype EmailJob。
注意 2:在工厂 bean 中如何避免每次都读取属性文件?
谢谢!
【问题讨论】:
-
您应该查看 Spring 的
@Conditional注释,它可以让您轻松指定何时激活 bean 或配置类。 Spring Boot 提供了许多有用的实现,尤其是@ConditionalOnProperty。
标签: java spring dependency-injection