【问题标题】:Spring cloud streams could not autowire Source.classSpring Cloud 流无法自动装配 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 类在运行时没有自动装配,这会导致错误

标签: spring spring-boot spring-cloud spring-cloud-stream spring-kafka


【解决方案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") 

【讨论】:

    猜你喜欢
    • 2019-01-26
    • 2017-12-18
    • 2016-09-27
    • 2013-01-29
    • 2023-04-08
    • 2012-12-04
    • 2013-11-12
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多