作用对象不同: @Component 注解作用于类,而@Bean 注解作用于方法。

@Bean 默认的 Bean name 是方法名。

@Component 用于自动检测和自动装配到 Spring 容器中,主要用于类级别。@Bean 通常在@Configuration 类中使用,用于显式声明单个 bean,更加灵活

在 Spring 框架中,@Component@Bean是用于定义和管理 Bean 的两种常见注解,但它们有不同的应用场景和作用对象:

  1. 作用对象

    • @Component:这个注解用于类级别,通常用于将一个类标记为 Spring 中的一个组件,使其成为 Spring 容器管理的 Bean。它是通用的构造型注解之一(其他还有@Service, @Repository, @Controller等),这些注解实际都是@Component的特殊化。
    • @Bean:这个注解用于方法级别,通常在配置类中使用。被标记的方法将返回一个对象,该对象会被注册为 Spring 应用上下文中的 Bean。
  2. 默认 Bean 名称

    • 使用@Component时,默认情况下生成的 Bean 名称是首字母小写的类名。
    • 使用@Bean时,默认情况下生成的 Bean 名称是方法名。当然,你也可以通过在注解中显式指定名称来覆盖默认名称。

这两者主要在于如何定义和配置 Beans:使用注解扫描自动检测组件(如使用@ComponentScan)或通过 Java 配置类显式地定义 Beans(如使用@Configuration 与@Bean 组合)。