繁体   English   中英

没有合格的 bean

[英]No qualifying bean

研究 Springboot,我让自己陷入了一个无限的错误虫洞。 这是最后一个:没有可用的 'ca.company.hello.A' 类型的合格 bean

然而,令我困惑的是我确实定义了 bean:

@Configuration
public class Config {

    @Bean
    public B b() {
        return new B();
    }

    @Bean
    public A a() {
        return new A();
    }
}

并像这样使用它:

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@Profile("client_app_profile_name")

@SpringBootApplication

public class Helloer {


    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(Helloer.class, args);
        A a = ctx.getBean(A.class);
        a.speak();
    }

}

这是我的文件结构:

在此处输入图像描述

这是 class A,以防万一:

@Component
public class A {
    @Autowired
    private B b;

    @Value("Covid 19")
    private String calamity;

    public void speak() {
        b.writeToScreen(this.calamity);
    }
}

有人可以给我提示一下 Springboot 还想从我这里得到什么吗? ;)

附言

如果我从Config中删除Bean A ,同样的错误仍然存在:

@Configuration
public class Config {

    @Bean
    public B b() {
        return new B();
    }

}

我可以重现你的问题。

1 - 将您的 Helloer class 移动到 ca.company package 内部。 如果 Helloer 与 ca.company 处于同一级别,则 Spring 类路径扫描将不起作用,您将收到如下错误:

如果您正在 @ComponentScanning 一个 springframework package,也会发生这种情况(例如,如果您错误地将 @ComponentScan 放入默认 package 中)

你的结构应该是:

- java
  - ca.company
    - config
    - hello
      Helloer

2 - 在 spring 类路径扫描工作的情况下,您可以从配置类中删除 bean 定义,因为您将收到双重 bean 定义错误。

3 - 删除您添加的注释以抑制 [1] 中的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM