Spring:@Component与@Bean
问题
据我所知,在Spring 2.5中引入了@Component
注释,以便通过使用类路径扫描来摆脱xml bean的定义。
@Bean
是在3.0版本中引入的,可以与@Configuration
一起使用,以便完全摆脱xml文件并使用java配置。
是否有可能重新使用@Component
注释而不是引入@Bean
注释?我的理解是,最终目标是在两种情况下都创建bean。
#1 热门回答(266 赞)
@Component
和@Bean
两个完全不同的东西,不应该混淆。
@Component
(and@Service
and@Repository
)用于使用类路径扫描自动检测和自动配置bean。注释类和bean之间存在隐式的一对一映射(即每个类一个bean)。这种方法对布线的控制非常有限,因为它纯粹是声明性的。
@Bean
用于明确声明单个bean,而不是让Spring像上面那样自动执行。它将bean的声明与类定义分离,并允许你精确地创建和配置bean。
回答你的问题......
是否可以重用@Component注释而不是引入@Bean注释?
当然可能;但他们选择不这样做,因为两者完全不同。春天已经足够混乱,没有进一步混淆水域。
#2 热门回答(130 赞)
@Component适用于元件扫描和自动接线。
你什么时候应该使用**@Bean**?
有时自动配置不是一种选择.344680146什么时候?**让我们假设你想要连接第三方库中的组件(你没有源代码,因此无法使用@Component注释其类),因此无法进行自动配置。
The**@Beanannotation返回一个对象**,该应该在应用程序上下文中注册为bean。方法**的3117219995主体负责创建实例的逻辑。
#3 热门回答(111 赞)
让我们考虑一下,我希望具体实现取决于一些动态状态.@Bean
非常适合这种情况。
@Bean
@Scope("prototype")
public SomeService someService() {
switch (state) {
case 1:
return new Impl1();
case 2:
return new Impl2();
case 3:
return new Impl3();
default:
return new Impl();
}
}
但是@Component
无法做到这一点。