Spring 组件扫描与配置的文档

Spring Documentation for Component Scan versus Configuration

我已经搜索了这个问题的答案,但我的搜索巫毒一定有一点偏差。

在工作中,我注意到人们倾向于使用 Spring 配置和 @Beans 来初始化我们的 Java 对象。虽然这种方法没有问题,但我认为切换到@Component(使用 ComponentScan)可能

  1. 稍微简化代码
  2. 让我们更符合良好的 Spring 做法

但是,考虑到这一点,我很难证明为什么我认为这是一个很好的做法。我对@Bean 的理解是它对于初始化遗留或非Spring 化代码很有用。这可能使我将 @Component 视为一种好的做法。

@Bean 方法的一个优点是它集中了初始化。与 @Component 相比,这更容易理解,后者不是那么直观。

Spring是否有任何关于每种方法的优缺点的良好文档?或者关于该主题的最佳实践指南?

@Configuration class 里面有@Bean-s 叫做"Java based configuration"。而且更加灵活,然后"Annotation based configuration"(@Component).

在同一个项目中进行 Java 配置和带注释的组件扫描是完全有效的,因为它们服务于不同的目的。

@Component(@Service、@Repository 等)用于自动检测和自动配置 bean。

@Bean 注释用于显式声明单个 bean,而不是让 Spring 自动执行。您可以为以这种方式实例化的 bean 提供更多设置。

您可以使用@Bean 执行以下操作。但是,这是不可能的 @Component:

@Bean
public MyService myService(boolean someCondition) {
    if(someCondition) {
      return new MyServiceImpl1();
    } else {
        return new MyServiceImpl2();
    }
}