首页 > 解决方案 > 没有合格的 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();
    }

}

这是我的文件结构:

在此处输入图像描述

这是A类,以防万一:

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

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

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

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

附言

如果我删除Bean Afrom Config,同样的错误仍然存​​在:

@Configuration
public class Config {

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

}

标签: javaspringspring-boot

解决方案


我可以重现你的问题。

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

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

你的结构应该是:

- java
  - ca.company
    - config
    - hello
      Helloer

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

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


推荐阅读