У меня есть (весенняя) служба, отправляющая электронные письма через различные клиентские адаптеры, в зависимости от среды, в которой они работают. Поэтому, когда я нахожусь на dev
, я хочу использовать ClientAdapterA
и в прямом эфире ClientAdapterB
. Использование выглядит следующим образом:Способ настройки адаптера для autowire через yml
@Service
public class EmailService {
@Autowired
private ClientAdapter clientAdapter;
public EmailResponse send(EmailRequest emailRequest) {
return clientAdapter.sendMail(emailRequest);
}
}
конфигурации я хочу, чтобы произойти через мой application.yml:
mail:
adapter: ClientAdapterA
Я попытался использовать @Qualifier
но, что позволяет только использование одного жесткого кодировкой адаптера:
@Qualifier("ClientAdapterB")
@AutoWired
private ClientAdapter clientAdapter;
Я также попытался создать класс Config, который должен обеспечить соответствующий компонент, но это не сработало:
@Configuration
public class JavaBeansAdapterConfig {
@Value("${mail.adapter}")
private String adapterName;
@Bean
public ClientAdapter clientAdapterImplementation() throws ClassNotFoundException {
ApplicationContext ctx = new AnnotationConfigApplicationContext();
return (ClientAdapter)ctx.getAutowireCapableBeanFactory().createBean(Class.forName(adapterName));
}
}
Что я делаю неправильно, или есть даже способ сделать это, как я хочу? Любая помощь приветствуется, спасибо.
Используйте '@ Profile' и загружайте один боб или другой в зависимости от профиля ... –