1、官方说明
-
@Component 和 @Bean 是两种使用注解来定义bean的方式。
-
@Component(和@Service和@Repository)用于自动检测和使用类路径扫描自动配置bean。注释类和bean之间存在隐式的一对一映射(即每个类一个bean)。
这种方法对需要进行逻辑处理的控制非常有限,因为它纯粹是声明性的。 -
@Bean用于显式声明单个bean,而不是让Spring像上面那样自动执行它。它将bean的声明与类定义分离,并允许您精确地创建和配置bean。
2.两者区别
- @Component使用类路径扫描自动检测并配置Bean,而@Bean显式声明单个Bean,而不是让Spring自动执行。
- @Component不会将Bean的声明与类定义解耦,而@Bean会将Bean的声明与类定义解耦。
- @Component是类级别的注释,而@Bean是方法级别的注释,该方法的名称用作Bean名称。
- @Component不必与@Configuration注释一起使用,因为@Bean注释必须在用@Configuration注释的类中使用。
我们不能创建一个bean使用@Component一类,如果类是外spring容器,而我们可以创建一个bean如果类是目前使用@Bean甚至一类外Spring容器。 - @Component具有不同的专长,例如@ Controller,@ Repository和@Service,而@Bean没有专长。
具体参考:https://stackoverflow.com/questions/10604298/spring-component-versus-bean#