Java 没有合格的豆子

Java 没有合格的豆子,java,spring,spring-boot,Java,Spring,Spring Boot,研究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(); }

研究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还想从我这里得到什么

附言

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

@Configuration
public class Config {

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

}

我可以重现你的问题

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

如果@ComponentScan正在扫描springframework包,也可能发生这种情况(例如,如果您错误地将@ComponentScan放入默认包中)

你的结构应该是:

- java
  - ca.company
    - config
    - hello
      Helloer
2-通过spring类路径扫描,您可以从配置类中删除bean定义,因为您将得到一个双bean定义错误


3-删除为抑制[1]中的错误而添加的批注

我可以重现你的问题

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

如果@ComponentScan正在扫描springframework包,也可能发生这种情况(例如,如果您错误地将@ComponentScan放入默认包中)

你的结构应该是:

- java
  - ca.company
    - config
    - hello
      Helloer
2-通过spring类路径扫描,您可以从配置类中删除bean定义,因为您将得到一个双bean定义错误


3-删除为抑制[1]中的错误而添加的批注

尝试不使用
@Bean public A A(){return new A();}
您已经用@Component注释了类A和类B。Spring将使用类路径扫描来自动检测和配置它们。您不需要在配置类中定义bean。尝试删除it@YCF_L没有工作。@HenriqueForlani没有工作。当您运行代码时,是否在IntelliJ IDEA运行配置窗口中将活动配置文件设置为
client\u app\u profile\u name
?或者您只需删除
@Profile()
。并考虑基于@ Henrique Forlani回答BEOWE检查您的代码。尝试没有<代码> bean bean A]({)返回new A.();}< />代码>您已经用@组件注释了A类和B类。Spring将使用类路径扫描来自动检测和配置它们。您不需要在配置类中定义bean。尝试删除it@YCF_L没有工作。@HenriqueForlani没有工作。当您运行代码时,是否在IntelliJ IDEA运行配置窗口中将活动配置文件设置为
client\u app\u profile\u name
?或者您只需删除
@Profile()
。并考虑根据下面的Henrique Forlani回答检查你的代码。嗨,恩里克。正如您在第1条中所说,我将主管道移动到了
ca.company
包。我从
Config
中删除了bean定义,如您在2中所说。但第三是什么?哪些注释?@JeniaIvanov您排除了db自动配置以抑制[1]中的错误,对吗?这没关系,但不是问题的根本原因。我提议的改变进展如何?嗨,亨里克。正如您在第1条中所说,我将主管道移动到了
ca.company
包。我从
Config
中删除了bean定义,如您在2中所说。但第三是什么?哪些注释?@JeniaIvanov您排除了db自动配置以抑制[1]中的错误,对吗?这没关系,但不是问题的根本原因。我提议的改革进展如何?