3

假设我们在 spring 配置中有一个 bean 定义

<bean id="scanningIMAPClient" class="com.acme.email.incoming.ScanningIMAPClient" />

我真正想要的是 scanIMAPClient 类型为 com.acme.email.incoming.GenericIMAPClient 如果配置的电子邮件服务器是普通 IMAP 服务器和 com.acme.email.incoming.GmailIMAPClient 以防它是 GMAIL 服务器,(因为 gmail行为方式略有不同)GmailIMAPClient 是 GenericIMAPClient 的子类。

我怎样才能在弹簧配置中做到这一点?

有一个包含电子邮件服务器配置的属性文件。

4

2 回答 2

1

Java配置很简单:

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

@Bean
public GenericIMAPClient scanningIMAPClient() {
    if(serverAddress.equals("gmail.com"))
        return new GmailIMAPClient();
    else
        return new GenericIMAPClient();
}

您可以使用 custom 模拟此行为FactoryBean

于 2012-11-21T21:31:48.610 回答
1

您可以使用编程配置:

@Configuration
public class AppConfig {

    @Bean(name="scanningIMAPClient")
    public GenericIMAPClient helloWorld() {
        ...check config and return desired type
    }

}

更多信息在这里

于 2012-11-21T21:32:00.640 回答