专栏首页关忆北.Spring中@Component和@Bean

Spring中@Component和@Bean

Spring管理Bean的方式
  • 注册Bean
  • 装配Bean
Spring实现管理的方式
  • 自动配置(隐式)
  • 使用JavaConfig的方式(显式)
  • 使用XML配置的方式(显式)

引用自:《Spring实战(第四版)》 自动配置:让Spring自动满足bean依赖的一种方法,在满足依赖的过程中,会在Spring上下文中寻找匹配的某个bean需求的其他Bean。

Spring从两个角度来实现自动配置
  1. 组件扫描(component):Spriing自动发现应用上下文中所创建的bean
  2. 自动装配(autowired):Spring自动满足bean之间的依赖

隐式装配较显示装配更为便利,但是显式装配更加强大。组件扫描和自动装配组合使用可使显式配置降低到最少

一、自动配置的实现方式

在自动配置的方式中,使用@Component告诉Spring,我是一个bean,你要来管理我,然后使用@AutoWired注解去装配Bean(所谓装配,就是管理对象直接的协作关系)。其优点是:使用范围比较广,所有类都可以进行注解。 @Component的作用就是把普通的pojo实例化到Spring容器中,相当于配置文件中的<bean id="" class=""/>,所以@Component这种方式适用于程序员自身开发的组件(有源码)。 如:

/**
 * 日期转换工具
 */
@Component
public class DateConverter implements Converter<String, Date> {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    @Override
    public Date convert(String source) {
        try {
            return sdf.parse(source);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
}
二、JavaConfig的实现方式

当需要引入第三方库组件到项目中时,无法第三方的组件上添加@Component和@Autowired注解的,因为第三方库的代码都是only-read的,所以需要使用显式配置的方式。 显式配置分为JavaConfig和使用xml配置文件两种形式,在Spring MVC框架中会使用到xml配置,这种方式配置比较繁琐,后逐步被Spring Boot取代,在Spring Boot中会采用JavaConfig的形式,JavaConfig并非业务逻辑代码,所以它与业务代码并没有耦合度。 如果系统中需要引入权限控制模块,假如我们选用SpringSecurity的情况下,会使用@Configuration@Bean

以此可见,在使用显式配置时, @Bean 需要在配置类中使用,即类上需要加上@Configuration注解

在一般常见情况下,@Bean注解在@Configuration类中声明,称之为“full”模式 @Component注解组合使用时,称之为“lite”模式。

两种模式的差异:

如果只是把@Bean注解用在方法上,并且各个@Bean注解的方法之间没有调用,上述两种模式达到的效果基本相同。都可以把@Bean注解方法返回的对象作为bean注册到容器中。 如果各个@Bean注解的方法之间有相互调用,那么两种模式就会有很大的区别-与full模式下的@Configuration不同,lite模式下 @Bean方法互相调用无法声明各个Bean之间的相互依赖关系。

总结:

@Compent和@Bean到底区别在哪? 在应用开发的过程中,如果想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component和@Autowired注解的,因此就不能使用自动化装配的方案了。

但是可以通过xml 或者在@Configuration配置类中通过@Bean进行配置

@Component来表示一个通用注释,用于说明一个类是一个spring容器管理的类(再通俗易懂一点就是将要实例化的类丢到Spring容器中去)。

@Component的范围比较广,所有类都可以进行注解;

而@Configuration注解一般注解在类里面有@Value注解的成员变量或@Bean注解的方法,@Bean主要和@Configuration配合使用的。

本文参考了《Spring实战第四版》以及初夏†失忆的文章,本文中的代码截图来自Github开源项目vhr

欢迎大家访问我的Github: FirstMrRight

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://blog.csdn.net/weixin_42313773复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • Spring之@Configuration、@Component、@Bean

    代表这个类是一个配置类,可理解为用spring的时候xml里面的<beans>标签

    chenchenchen
  • Spring 注解比较,@Bean 和 @Component的区别

    本文打算介绍几个不太容易说出其区别,或者用途的 Spring 注解,比如 @Component 与 @Bean 的比较,@ControllerAdvice 是如...

    良月柒
  • Spring bean注解配置(1)—— @Component

    Spring自带的@Component注解及扩展@Repository、@Service、@Controller,如图:

    浩Coding
  • @Component 和 @Bean 的区别

    @Component(和@Service和@Repository)用于自动检测和使用类路径扫描自动配置bean。注释类和bean之间存在隐式的一对一映射(即每个...

    明明如月学长
  • spring中的Bean (@Bean、@Configuration和@TestConfiguration)

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

    平凡的学生族
  • @Component和@Bean以及@Autowired、@Resource

      Spring用xml配置文件的时候(不知道阅读这篇文章的你用没用过,我用过一段时间,那是黑暗伤痛的回忆QQQ),一个xml配置文件里面有很多个bean。类似...

    yaphetsfang
  • 面试官:Spring 的 @Bean 和 @Component 有什么区别?

    哈喽,我是狗哥。今天分享几个不太容易说出其区别或者用途的 Spring 注解,比如 @Component 与 @Bean 的比较,@ControllerAdvi...

    JavaFish
  • Spring中Bean

    1、Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性(即实例化); 2、凡是有方法或属性的类都需要实例化,这样才能具象化去使用这些方法和属...

    后端码匠
  • Spring中Bean

    一、什么是Bean 1、Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性(即实例化); 2、凡是有方法或属性的类都需要实例化,这样才能具象...

    Zephery
  • Spring 中的 Bean

    单例 bean 存在线程问题,主要是因为当多个线程操作同一个对象的时,对这个对象的非静态成员变量的写操作,会存在线程安全问题。

    happyJared
  • Spring中Bean及@Bean的理解

    1、Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性(即实例化);

    Java编程指南
  • Spring中bean的scope

    Spring容器中的bean具备不同的scope,最开始只有singleton和prototype,但是在2.0之后,又引入了三种类型:request、sess...

    阿杜
  • Spring中Bean的细节

    第二种方式:如果某个类在别人写的jar包中 无法通过修改源代码 使用默认构造函数时

    暴躁的程序猿
  • Spring中bean的配置

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

    大黄大黄大黄
  • Spring容器和Bean加载

    IOC(控制反转):对于组件的控制权进行了转移,传统的程序设计是由客户端new出对象,是程序主动创建所依赖的对象。而IOC是专门将对象的创建交给容器处理,组件的...

    春哥大魔王
  • 【Spring实战】—— 4 Spring中bean的init和destroy方法讲解

    本篇文章主要介绍了在spring中通过配置init-method和destroy-method方法来实现Bean的初始化和销毁时附加的操作。 在java中,...

    用户1154259
  • Spring中实现动态注册bean

    WindCoder
  • spring中Bean的作用域

    在Spring中,那些组成你应用程序的主体(backbone)及由Spring IoC容器所管理的对象,被称之为bean。 简单地讲,bean就是由Spri...

    MickyInvQ
  • Spring中基于Java的配置@Configuration和@Bean用法

    转载自 http://blog.csdn.net/vvhesj/article/details/47661001

    allsmallpig

扫码关注腾讯云开发者

领取腾讯云代金券