• spring中的@Configuration配置类和@Component


    在这里插入图片描述

    在Spring的开发工作中,基本都会使用配置注解,尤其以@Component及@Configuration为主,当然在Spring中还可以使用其他的注解来标注一个类为配置类,这是广义上的配置类概念,但是这里我们只讨论@Component和@Configuration,因为与我们的开发工作关联比较紧密,那么接下来我们先讨论下一个问题,就是@Component与@Configuration有什么区别?

    • 这里直接说重点:
      1.两种注解分为Full模式和Lite模式

    Lite模式

    当@Bean方法在没有使用@Configuration注释的类中声明时,它们被称为在Lite模式下处理。它包括:在 @Component 中声明的@Bean方法,甚至只是在一个非常普通的类中声明的Bean方法,都被认为是Lite版的配置类。@Bean方法是一种通用的工厂方法(factory-method)机制。

    和Full模式的@Configuration不同,Lite模式的@Bean方法不能声明Bean之间的依赖关系。这种模式下的注解不会被Spring所代理,就是一个标准类,如果在这个类中有@Bean标注的方法,那么方法间的相互调用,其实就是普通Java类的方法的调用。


    Full模式`

    @Configuration在Spring中是代表FULL模式的配置注解,这种模式下的类会被Spring所代理 ,那么在这个类中的@Bean方法的相互调用 (这就表示它的方法不能有final、私有的,静态的) ,就相当于调用了代理方法,那么在代理方法中会判断,是否调用getBean方法还是invokeSuper方法,这里就是这两个注解的最根本的区别。


    2.@Configuration标记的类可以理解为一个xml的配置文件,@Component为然后每一个@bean注解的方法可以理解为中的内容

    3.@Configuration(proxyBeanMethods=true)的时候才代表代理启用,而当启用使用默认的false的时候(2.2版本之后改为了false,因为可以提高启动效率,减少时间),@Configuration(proxyBeanMethods=false)就等于了@Component(未使用代理)

    4.在什么时候使用@Configuration或者@Component


    • 如果是在公司的业务功能/服务上做开发,使用Full模式
    • 如果你是个容器开发者,或者你在开发中间件、通用组件等,那么使用Lite模式是一种更被推荐的方式,它对Cloud Native更为友好

    5.@Configuration 标注类上,以下的所以@bean方法被调用之后,都是返回一同一个实例;而@Component 则是每次被调用之后返回一个新的实例

    有什么问题可以在评论区说明补充,或者后面我想到其他的会补充上去

  • 相关阅读:
    戏曲文化苑|戏曲文化苑小程序|基于微信小程序的戏曲文化苑系统设计与实现(源码+数据库+文档)
    编织人工智能:机器学习发展历史与关键技术全解析
    2.3_7生产者-消费者问题
    POSIX信号量
    C++类型转换运算符
    【花雕体验】20 音乐可视化:ESP32_C3与WS2812B的系列尝试
    2000-2020年全国各省财政收支分类明细数据
    Android build.gradle读取String中文件及gradle.properties数据
    线程安全问题及关键字synchronized,volatile
    【数据库原理与应用(第3版)】第二章:数据模型(选择与填空)
  • 原文地址:https://blog.csdn.net/m0_68987535/article/details/132778939