Spring:@Component 对比 @Bean

众所周知,@Component注解是在Spring 2.5版本引入的,以便于可以通过路径扫描的方式来替换配置文件。
@Bean是在Spring3.0版本引入的,可以配合使用@Configuration注解来达到完全替换配置文件的目的。
那么,我们是否可以仅使用二者其一?换句话说,二者有何区别呢?
事实上,@Component@Bean做两个完全不同的事情,不应该混为一谈。
@Component(和@Service@Repository)用于自动检测和使用类路径扫描自动配置bean。注释类和bean之间存在隐式的一对一映射(即每个类一个bean)。这种方法对需要进行逻辑处理的控制非常有限,因为它纯粹是声明性的。
@Bean用于显式声明单个bean,而不是让Spring像上面那样自动执行它。它将bean的声明与类定义分离,并允许您精确地创建和配置bean。
那我们在什么时候会使用@Bean?假设下,某天你想创建一个第三方的组件,但是你没有源代码,也就没办法使用@Component进行自动配置,这种时候使用@Bean就比较合适了。
又比如,具体采用哪个实现是依赖于某些参数的,在这种情况下@Bean无疑是更合适的选择。
例:

@Bean
@Scope("prototype")
public SomeService someService(String state) {
    switch (state) {
    case 1:
        return new Impl1();
    case 2:
        return new Impl2();
    case 3:
        return new Impl3();
    default:
        return new Impl();
    }
}

原始讨论链接

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值