专栏首页后端技术@Bean与@Component的比较

@Bean与@Component的比较

参考

Spring: @Component versus @Bean

背景提要

我们知道@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名。

我们知道,@Component是spring2.5提出的,是为了通过classpath scanning来摆脱用xml来定义bean。 @Bean是在spring3.0提出的,而且可以用在@Configuration中,以便完全摆脱xml文件。 那么,

  1. 能通过复用@Component来代替@Bean吗?
  2. 他们各自的功能是什么?

引入第三方库时要用@Bean设置

@Component倾向于组件扫描和自动装配。 但有时自动设置是做不到的。 假如你要引入第三方库,可是如果你没有源代码,也就无法在其上添加@Component,自动设置也就无从下手。 但@Bean会返回一个被spring认可的Bean。@Bean所注释的方法内部可以对这个第三方库的实例进行设置。

可以灵活返回不同的Bean

假如有一个接口叫SomeServiceImpl1, Impl2,Impl3Impl4都继承自SomeService。 那么如下代码就可以根据状态变量,动态地返回不同的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();
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • spring中的Bean (@Bean、@Configuration和@TestConfiguration)

    bean在spring中可以理解为一个对象。理解这个对象需要换一种角度,即可将spring看做一门编程语言,@Bean是spring语言声明对象的标识。

    平凡的学生族
  • springBean内部级联

    阅读Bean官方文档的@Bean Methods in @Configuration Classes和@Bean Lite Mode小节,可了解spring对B...

    平凡的学生族
  • 870. Advantage Shuffle

    思路 用priority_queue<pair<int, int>>解决。使用贪心算法,按数组A从大到小尽可能在数组B中找到匹配的元素即可。就像是“田忌赛马”...

    平凡的学生族
  • 详述 Spring 中 Bean 的生命周期

    对于普通的 Java 对象,当我们使用new关键字创建对象的时候,如果它没有任何引用,则其会被垃圾回收机制回收。而由 Spring IoC 容器托管的对象,它们...

    CG国斌
  • 谈谈 Spring Bean 的生命周期和作用域?

    首先,创建 Bean 会经过一系列的步骤,主要包括: 实例化 Bean 对象。 设置 Bean 属性。 如果我们通过各种 Aware 接口声明了依赖关系,...

    葆宁
  • Spring扩展点总结(持续更新)

    左手java右手go
  • Spring Bean 生命周期流程

    happyJared
  • Spring的 Bean 注解和生命周期

    使用 @Autowired 注解自动装配 bean,要想把类标识成可用于 @Autowired 注解自动装配的 bean 的类,采用以下注解可实现:

    happyJared
  • JavaEE开发之Spring中Bean的作用域、Init和Destroy方法以及Spring-EL表达式

    上篇博客我们聊了《JavaEE开发之Spring中的依赖注入以及AOP》,本篇博客我们就来聊一下Spring框架中的Bean的作用域以及Bean的Init和De...

    lizelu
  • Spring学习笔记3_Bean 获取与实例化

    本章目录 Spring学习笔记3_Bean 获取与实例化 1.ApplicationContext与BeanFactory关系 2.Bean的实例化方式 ...

    Java学习

扫码关注云+社区

领取腾讯云代金券