Spring Cloud 流无法自动装配 Source.class

Posted

技术标签:

【中文标题】Spring Cloud 流无法自动装配 Source.class【英文标题】:Spring cloud streams could not autowire Source.class 【发布时间】:2019-04-29 01:41:16 【问题描述】:

我正在从头开始学习 Spring Cloud Streams。

我试图创建一个这样的源应用程序:

import org.springframework.cloud.stream.messaging.Source; //etc
@RestController
@SpringBootApplication
@CrossOrigin
@EnableBinding(Source.class)
public class StreamsProducerApplication 

    @Autowired
    Source source;

    @GetMapping(value="/send/message")
    public void sendMessage(@PathVariable String message)
        if(message != null)

     source.output().send(MessageBuilder.withPayload(message).build());


public static void main(String[] args) 
    SpringApplication.run(StreamsProducerApplication.class, args);

但是,我从 Intellij IDEA 在“Source source;”处收到错误提示。说“无法自动装配。找不到‘源’类型的 bean。

我可以理解Source是我导入的接口,但是spring官网说“Spring Cloud Stream为你创建了接口的实现。你可以通过自动装配在应用程序中使用它”https://docs.spring.io/spring-cloud-stream/docs/current/reference/htmlsingle/

那么我是怎么做错的呢?谢谢。

【问题讨论】:

您是否尝试运行您的应用程序? 只是IDE误报 我也有同样的问题。 Source 类在运行时没有自动装配,这会导致错误 【参考方案1】:

只是 Intellij IDEA 不知道 @EnableBinding(Source.class) 在运行时将成为一个 bean。只有这样一个 bean 定义,所以工具无法确定在 @Autowired 中注入什么。

否则,您的代码非常好,您只需要运行它并使用您对代码的期望即可。

【讨论】:

我有同样的问题,我尝试运行应用程序(我使用基于构造函数的注入),但在运行时出现错误。这种情况该怎么办? Parameter 0 of constructor in __ required a bean of type 'org.springframework.cloud.stream.messaging.Source' that could not be found. Action: Consider defining a bean of type 'org.springframework.cloud.stream.messaging.Source' in your configuration. 您评论的问题有点过时了。考虑提出一个具有更多相关上下文的新 SO 线程。【参考方案2】:

这只是一个 IDE 错误警报。 您可以通过添加

在 IDE 中抑制此错误
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") 

【讨论】:

以上是关于Spring Cloud 流无法自动装配 Source.class的主要内容,如果未能解决你的问题,请参考以下文章

Spring cloud sleuth 注解:自动装配不起作用

Thymeleaf-Spring4 无法自动装配 TemplateEngine

Spring 无法自动装配 Map bean

创建 bean 时出错。注入自动装配的依赖项失败。无法自动装配字段

Spring框架的新手收到此错误:无法自动装配字段:

Spring security 无法自动装配 UserDetailsS​​ervice