一尘不染

Spring@Component与@Bean

spring

我了解到@Component注释是在Spring 2.5中引入的,目的是通过使用类路径扫描摆脱xml bean的定义。

@Bean是在Spring 3.0中引入的,可以与之一起使用,@Configuration以完全摆脱xml文件并改用java config。

是否有可能重新使用@Component注释而不是引入@Bean注释?我的理解是,两种情况下的最终目标都是创建bean。


阅读 490

收藏
2020-04-11

共2个答案

一尘不染

@Component@Bean做两件完全不同的事情,不应混淆。

@Component(和@Service@Repository)用于使用类路径扫描自动检测和自动配置bean。在带注释的类和Bean之间存在隐式的一对一映射(即,每个类一个Bean)。由于此布线仅是声明性的,因此使用此方法对布线的控制非常有限。

@Bean用于显式声明单个bean,而不是像上面那样让Spring自动执行。它使Bean的声明与类定义脱钩,并允许你完全按照自己的选择创建和配置Bean。

要回答你的问题…

是否有可能重新使用@Component注释而不是引入@Bean注释?

当然可以;但他们选择不这样做,因为两者是完全不同的。spring已经很混乱了,又没有使水更浑浊了。

2020-04-11
一尘不染

@Component 优选用于组件扫描和自动接线。

什么时候应该使用@Bean?

有时,自动配置不是一个选择。什么时候?假设你想从第三方库连接组件(你没有源代码,因此无法使用@Component注释其类),因此无法进行自动配置。

所述@Bean注释返回一个对象该弹簧应在应用程序上下文豆注册。方法的主体具有负责创建实例的逻辑。

2020-04-11