Я не могу автоматически подключить org.springframework.integration.ftp.dsl.FtpMessageHandlerSpe c, используя имя компонента + имя параметра, совпадающее с именем компонента. Я считаю, что Spring должен иметь возможность разрешать зависимости, когда существует несколько бинов одного типа в случае, если имя бина и имя целевого параметра совпадают.
У меня есть такая конфигурация:
@Configuration
class cfg {
@Bean
Object ftpMessageHandlerSpecUser(
FtpMessageHandlerSpec ftpMessageHandlerSpecA,
FtpMessageHandlerSpec ftpMessageHandlerSpecB
) {
return null;
}
@Bean
FtpMessageHandlerSpec ftpMessageHandlerSpecA() {
return outboundAdapter(() -> null);
}
@Bean
FtpMessageHandlerSpec ftpMessageHandlerSpecB() {
return outboundAdapter(() -> null);
}
}
Когда я пытаюсь запустить его, появляется следующая ошибка:
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of method ftpMessageHandlerSpecUser in com.example.demo.cfg required a single bean, but 2 were found:
- &ftpMessageHandlerSpecA: defined by method 'ftpMessageHandlerSpecA' in class path resource [com/example/demo/cfg.class]
- &ftpMessageHandlerSpecB: defined by method 'ftpMessageHandlerSpecB' in class path resource [com/example/demo/cfg.class]
Action:
Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed
Когда я добавляю @Qualifier к параметрам метода, он работает:
@Configuration
class cfg {
@Bean
Object ftpMessageHandlerSpecUser(
@Qualifier("ftpMessageHandlerSpecA") FtpMessageHandlerSpec ftpMessageHandlerSpecA,
@Qualifier("ftpMessageHandlerSpecB") FtpMessageHandlerSpec ftpMessageHandlerSpecB
) {
return null;
}
@Bean
FtpMessageHandlerSpec ftpMessageHandlerSpecA() {
return outboundAdapter(() -> null);
}
@Bean
FtpMessageHandlerSpec ftpMessageHandlerSpecB() {
return outboundAdapter(() -> null);
}
}
Это работает:
@Configuration
class cfg2 {
@Bean
Object foo(
String beanA,
String beanB
) {
return null;
}
@Bean
String beanA() {
return "beanA";
}
@Bean
String beanB() {
return "beanB";
}
}
Почему он не работает с FtpMessageHandlerSpe c из весенней интеграции?