Я создаю приложение Spring boot
с двумя подмодулями: sumboduleEmail и submoduleSms. У каждого подмодуля есть @Configuration
файл, который создает бины.
-root
- SpringBootApplicationClass
| - submoduleEmail
| - QueueEmail.java
| - ExchangeEmail.java
| - Config.java
| - submoduleTwo
| - QueueSms.java
| - ExchangeSms.java
| - Config.java
В каждом конфигурационном файле:
@Bean("emailQueue") or ("smsQueue")
public Queue queue() {
return new Queue(configProperties.getQueue());
}
@Bean("emailExchange") or ("smsExchange")
public DirectExchange exchange() {
return new DirectExchange(configProperties.getExchange());
}
@Bean("emailBinding") or ("smsBinding")
public Binding binding() {
return BindingBuilder
.bind(queue())
.to(exchange())
.with(configProperties.getRoutingKey());
}
В связи с тем, что Spring запускается из корня проекта, он видит все bean-компоненты из всех подмодулей.
Я пытаюсь связать свой локальный Exchange
боб с локальным Queue
бином внутри локального Email-подмодуля.
Если не использовать Qualifier
-аннотации, я ожидаю связывания только локальных bean-компонентов из локального подмодуля. Но Spring-boot имеет bean-компоненты из собственного глобального контекста с другими bemo-компонентами и связывают неправильные bean-компоненты. Из-за этого я получаю неправильную привязку.
Первое решение этой проблемы - используйте аннотацию Qualifier
, как в примере.
Но как сказать Spring boot, что он должен использовать только локальные компоненты в локальном подмодуле, не используя Qualifier
-аннотации?