在Finchley.SR2上,这是代码
@Configuration
@EnableAutoConfiguration
@SpringBootApplication
@EnableBinding(Processor.class)
@RestController
public class Application {
private static Logger log = LoggerFactory.getLogger(Application.class);
@Autowired
private Processor processor;
@Autowired
MappingJackson2MessageConverter testConverter;
@Bean
@StreamMessageConverter
MappingJackson2MessageConverter createTestConverter(){
return new MappingJackson2MessageConverter();
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
当我启动时,我得到了
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.cloud.stream.messaging.Processor' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
但是,如果我取出@StreamMessageConverter,则可以成功自动连接处理器。
我该怎么做才能同时保留自定义的消息转换器和自动连线的处理器?谢谢!
答案 0 :(得分:1)
这里发生了很多事情,所以让我们尝试解析它。 。
第一个问题,为什么需要自动接线以下内容?
@Autowired
private Processor processor;
您通常不需要直接与Processor
进行交互,因为该框架已用于框架中,以在绑定程序公开的远程目标与您的消息处理程序之间提供委托/连接模型。
此外,您的实际问题与生命周期有关,这可能是对我们而言较小但无害的错误,并且可能与在同一配置类中配置和自动装配处理器有关。
第二:
@Configuration
@EnableAutoConfiguration
@SpringBootApplication
您只需要一个
@SpringBootApplication
第三:
为什么需要配置MappingJackson2MessageConverter
?内容类型转换是框架的透明功能,尽管我们确实提供了配置自定义消息转换器的功能,但您正在配置的内容已经由框架配置,并且实际上是七个预先配置的消息转换器堆栈中的第一个
最后一个问题:
您正在尝试做什么?您能解释一下用例吗?