Spring 按参数名称自动装配对 FtpMessageHandlerSpec 不起作用
Spring autowiring by parameter name does not work for FtpMessageHandlerSpec
我无法通过使用与 bean 名称相同的 bean 名称 + 参数名称来自动装配 org.springframework.integration.ftp.dsl.FtpMessageHandlerSpec。我相信 Spring 应该能够在存在多个相同类型的 bean 时解决依赖关系,以防 bean 名称和目标参数名称相同。
我有这样的配置:
@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";
}
}
为什么它不能与 spring 集成的 FtpMessageHandlerSpec 一起使用?
DSL *Spec
s 是基础 SI 组件的 FactoryBean
s;因此 bean 名称上的前导 &
,因此您需要一个 @Qualifier
.
你到底想通过注入这些来达到什么目的?它们只是集成流程的构建块。
我无法通过使用与 bean 名称相同的 bean 名称 + 参数名称来自动装配 org.springframework.integration.ftp.dsl.FtpMessageHandlerSpec。我相信 Spring 应该能够在存在多个相同类型的 bean 时解决依赖关系,以防 bean 名称和目标参数名称相同。
我有这样的配置:
@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";
}
}
为什么它不能与 spring 集成的 FtpMessageHandlerSpec 一起使用?
DSL *Spec
s 是基础 SI 组件的 FactoryBean
s;因此 bean 名称上的前导 &
,因此您需要一个 @Qualifier
.
你到底想通过注入这些来达到什么目的?它们只是集成流程的构建块。