spring中的@Configuration配置类和@Component

2023-11-11

在这里插入图片描述

在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配置文件,然后每一个@bean注解的方法可以理解为<bean>中的内容

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

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


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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring中的@Configuration配置类和@Component 的相关文章

  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • Spring 3 匹配通配符严格,但找不到元素 'jee:jndi-lookup' 的声明

    所以我遇到了与这里类似的问题 Spring 3 0错误 匹配通配符严格 但找不到元素的声明 https stackoverflow com questions 8651781 spring 3 0 error the matching wi
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe
  • 排除apk文件中的预定义资源

    排除apk文件中的预定义资源 我用 Android Studio 创建了一个空白项目 然后生成 apk 文件 查看该文件内部 我可以看到 在 res drawable 文件夹中 有许多不需要的文件 例如 abc ic clear holo
  • 如何对该表进行加法运算?

    import javax swing import javax swing event import java awt import java awt event import java awt event ActionEvent impo
  • 哈希表中的下/上负载因子

    我要用java编写一个链式哈希集类 我知道负载系数是 M 容量 其中 M 是表中当前元素的数量 容量是表的大小 但是负载因子如何帮助我确定是否应该调整表大小并重新散列 此外 我在任何地方都找不到如何计算下 上负载系数 他们还需要吗 我希望这
  • 哪些注释目标适用于 Java 记录?

    我有一个用于定义方法或字段的注释 如下所示 Retention RetentionPolicy RUNTIME Target value ElementType METHOD ElementType FIELD public interfa
  • 更改 JComboBox 中选择的颜色(选择后)

    我正在使用 Swing 编写 GUI 我有一个定制的写法JComboBox用一个ListCellRenderer and a BasicComboBoxEditor In my getListCellRendererComponent 方法

随机推荐

  • Python零基础入门--手动安装pip、selenium、lib包

    一 python安装教程 1 python exe安装踩坑点 运行命令 提示 python 不是内部或外部命令 1 1 注意勾选path 不然要自己在系统path中的添加变量 操作步骤参考如下 1 2 自定义安装路径 本文python ex
  • STL标准模板库 list的使用

    ZZ 李木空间 www limou net list的使用 在使用list必须包括头文件 include
  • WSL结合Windows Terminal的优化

    windows下面使用Linux命令 对于如今的工作人员已经不再是遥不可及的梦想 这得益于WSL Windows subsystem for Linux 的出现 不仅如此 windows系统还推出了windows terminal 对于终端
  • Mysql 入门篇之二进制安装

    文章目录 Mysql 5 7 入门安装 卸载自带组件 下载二进制包 安装 配置 Mysql 8 0 入门安装 卸载自带组件 下载二进制包 安装 配置 Mysql 5 7 入门安装 环境说明 CentOS Linux release 7 6
  • C++STL之set/multiset容器

    概述 set multiset容器的特性 1 set multiset的特性是所有元素会根据元素的值自动进行排序 set是以RB tree 红黑树 属于平衡二叉树的一种 而平衡二叉树是属于二叉树的一种 为底层机制 其查找效率非常好 set容
  • c++循环、continue、排序、goto以及猜数字小游戏

    打印 include
  • 常用通信协议总结

    通信可以形象的比喻成两个人讲话 1 你说的别人得能听懂 双方约定信号的协议 2 你的语速别人得能接受 双方满足时序要求 3 串行通信 一个人说 一个人听 4 并行通信 xx个人说 xx个人听 一 UART协议 UART Universal
  • 关于Ubuntu14.04在VMware中分辨率的问题

    关于Ubuntu14 04在VMware中分辨率的问题 需要先安装VMware tool之后才能正确匹配显示分辨率 例如1920 1080
  • flutter 网络地址URL转file

    方法1 import dart io import package http http dart as http import package path path dart import package path provider path
  • 微信小程序上传图片报错:uploadFile:fail url not in domain list

    上传图片时 在微信开发工具中可以正常上传成功 手机上预览也可上传成功 小程序发布成功后 上传失败 提示 uploadFile fail url not in domain list 错误信息如下 解决方案 1 在微信管理公众平台 小程序 开
  • 数字图像处理 第五章图像复原与重建

    文章目录 数字图像处理 第五章 图像复原与重建 引言 5 1背景知识 5 2图像退化与复原 5 3噪声模型 高斯噪声 椒盐噪声 瑞丽噪声 伽马噪声 5 4只存在噪声的复原 空间滤波 均值滤波 统计排序滤波 自适应滤波 数字图像处理 第五章
  • java多线程总结:原理结合源码详细讲解 - 简单实用

    执行策略 线程执行的方式 串行执行 比如 医院给病人看病的时候 可以让所有的病人都拍成一个队形 让一个医生统一的看病 医生 线程 病人看病 任务 这种一个医生给一群站好队形的病人看病 映射到java就相当于 单线程串行执行任务 映射到我们j
  • 理解D3D—(2)最多混合几层texture

    理解D3D 2 最多混合几层texture 先提出问题 Q 要是模型有很多层贴图 再加上shadow map 还有ssao 岂不是会不够用了 A 参考资料 IDirect3DDevice9 SetTexture Assigns a text
  • Linux静态库与动态库

    文章目录 一 源代码的组织 二 静态库 三 动态库 四 静态库与动态库的优缺点 1 优点 2 缺点 五 动态库的优缺点 1 优点 2 缺点 六 编译的优先级 七 版权声明 一 源代码的组织 我们通常把公用的自定义函数和类从主程序中分离出来
  • mnt/hgfs 共享文件夹文件丢失不见

    Vmware centos mnt hgfs 共享文件夹文件丢失 我在强制虚拟机关机后 再次打开发现原先与windows共享的文件夹没有文件了 熟悉的同学都知道windows和Vmware如何共享文件夹 使用vmware tools 在li
  • 硅基生命之漫谈-1:天马行空

    1 身 生理 硬件 1 1 分解与组合 原子 分子 有机分子 基因 器官 组织 人体 1 2 五官 眼 摄像头 耳 拾音器 鼻 各种气体床传感器 口 发声器 舌 味道传感器 1 3 人体八大系统 运动系统 手 足 身体 运动 神经系统 眼
  • ChatGPT对教育发展方向的影响

    ChatGPT 对教育发展的影响主要体现在以下几个方面 智能化教育 通过 ChatGPT 这样的语言模型 可以提供智能的教育辅助 如自动纠错 智能问答等 提高教学效率和学习效果 在线教育 通过使用 ChatGPT 可以在线提供教育服务 消除
  • UVM环境(env)树形结构

    UVM验证环境的组成 sequencer 负责将数据转给 driver driver 负责数据的 发送 driver 有时钟 时序的概念 agent 其实只是简单的把 driver monitor 和 sequencer 封装在一起 age
  • 微信小程序配置不同页面title

    1 配置全局title 在app json中window配置navigationBarTitleText 2 配置不同页面title 在页面的json文件中单独配置navigationBarTitleText 注意 如果保存之后不刷新执行以
  • spring中的@Configuration配置类和@Component

    在Spring的开发工作中 基本都会使用配置注解 尤其以 Component及 Configuration为主 当然在Spring中还可以使用其他的注解来标注一个类为配置类 这是广义上的配置类概念 但是这里我们只讨论 Component和