@Component
并@Bean
做两件完全不同的事情,不应混淆。
@Component
(和@Service
和@Repository
)用于使用类路径扫描自动检测和自动配置bean。在带注释的类和Bean之间存在隐式的一对一映射(即,每个类一个Bean)。由于此布线仅是声明性的,因此使用此方法对布线的控制非常有限。
@Bean
用于显式声明单个bean,而不是像上面那样让Spring自动执行。它使Bean的声明与类定义脱钩,并允许你完全按照自己的选择创建和配置Bean。
要回答你的问题…
是否有可能重新使用@Component
注释而不是引入@Bean
注释?
当然可以;但他们选择不这样做,因为两者是完全不同的。spring已经很混乱了,又没有使水更浑浊了。
@Component 优选用于组件扫描和自动接线。
什么时候应该使用@Bean?
有时,自动配置不是一个选择。什么时候?假设你想从第三方库连接组件(你没有源代码,因此无法使用@Component注释其类),因此无法进行自动配置。