在下面的场景中,@Bean 或@Component 的优先级是什么?

What is given priority in below scenario @Bean or @Component?

我正在学习 Spring 的概念并且遇到了@Bean 和@Component 注释。我想知道在以下情况下会发生什么:

@Configuration
class ConfigClass {

  @Bean
  public ComponentClass ComponentClass() {
    return new ComponentClass(someDependency1, someDependency2, someDependency3);
  }
}

@Component
class ComponentClass{
  private SomeDependency1 sd1;
  private SomeDependency2 sd2;
  private SomeDependency3 sd3;

  public ComponentClass(SomeDependency1 sd1, SomeDependency2 sd2, SomeDependency3 sd3) {
    /* initialize here */
  }
}

我已经将 ComponentClass 声明为 @Component,这意味着它现在是一个 spring bean。但是我在configclass中也单独为它定义了一个@Bean。

  1. 默认情况下,这些 bean 中的哪些将被实际使用,因为 Spring 是单例?

  2. 删除@Component 后会发生什么?

Spring 会发现错误并在应用程序启动期间抛出 NoUniqueBeanDefinitionException。 如果您删除 @Component 注释,它将按预期工作,@Bean 将用于初始化。