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配置文件,然后每一个@bean注解的方法可以理解为<bean>中的内容
3.@Configuration(proxyBeanMethods=true)的时候才代表代理启用,而当启用使用默认的false的时候(2.2版本之后改为了false,因为可以提高启动效率,减少时间),@Configuration(proxyBeanMethods=false)就等于了@Component(未使用代理)
4.在什么时候使用@Configuration或者@Component
- 如果是在公司的业务功能/服务上做开发,使用Full模式
- 如果你是个容器开发者,或者你在开发中间件、通用组件等,那么使用Lite模式是一种更被推荐的方式,它对Cloud Native更为友好
有什么问题可以在评论区说明补充,或者后面我想到其他的会补充上去
相关文章:
spring中的@Configuration配置类和@Component
在Spring的开发工作中,基本都会使用配置注解,尤其以Component及Configuration为主,当然在Spring中还可以使用其他的注解来标注一个类为配置类,这是广义上的配置类概念,但是这里我们只讨论Component和Configuration&…...
企业架构LNMP学习笔记29
Nginx负载均衡配置: 架构分析: 1)用户访问请求Nginx负载均衡服务器; 2)Nginx负载均衡服务器再分发请求到Web服务器。 实际配置负载均衡,只需修改作为负载均衡服务器的Nginx即可,当前架构中的…...
Ubuntu14.04离线安装gcc-5.3.0
离线安装gcc 下载gcc安装包下载相关依赖下载gmp下载mpfr下载mpc 编译、安装gcc配置环境变量 拉取的一个虚拟机使用的系统是Ubuntu14.04,gcc版本是4.8.4,由于gcc版本较低,不太支持Libtorch,于是搜寻了许多办法来解决这个问题&#…...
axios返回几种数据格式? 其中Blob返回时的size是什么意思?
axios返回几种数据格式? 其中Blob返回时的size是什么意思? 1、字符串(String):服务器可以返回纯文本或HTML内容,Axios会将其作为字符串返回。 2、JSON(JavaScript Object Notation)ÿ…...
【GO语言基础】基本数据类型
系列文章目录 【Go语言学习】ide安装与配置 【GO语言基础】前言 【GO语言基础】变量常量 【GO语言基础】数据类型 文章目录 系列文章目录数据类型数值型:整数类型:浮点数类型: 字符型-布尔型-字符串零值转义字符 常用类型转换运算符总结 数据…...
【Python】OpenCV立体相机配准与三角化代码实现
下面的介绍了使用python和OpenCV对两个相机进行标定、配准,同时实现人体关键点三角化的过程 import cv2 as cv import glob import numpy as np import matplotlib.pyplot as pltdef calibrate_camera(images_folder):images_names = glob.glob(images_folder...
通过Idea或命令将本地项目上传至git
通过Idea或命令将本地项目上传至git 一、Git创建仓库 1、登录Gitee账号,点击新建 2、填写如下相关信息,点击创建 3、在此处可以复制项目链接 二、Idea配置和解绑git,提交项目 1、idea打开项目,操作如下 2、在弹框里选择…...
python selenium 爬虫教程
Python和Selenium是很强大的爬虫工具,可以用于自动化地模拟浏览器行为,从网页中提取数据。下面是一个简单的使用Python和Selenium进行爬虫的案例。 入门: 1. 安装和配置: 首先,你需要安装Python和Selenium。可以使用…...
Linux基础知识及常见指令
Linux简介及相关概念 什么是Linux? Linux是一个免费开源的操作系统内核,最初由Linus Torvalds于1991年创建。它是各种Linux发行版(通常称为“发行版”)的核心组件,这些发行版是完整的操作系统,包括Linux内…...
分享一个基于Python和Django的产品销售收入数据分析系统源码
💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…...
UniTask保姆级教程
目录 一、UniTask的简介和安装 https://github.com/Cysharp/UniTask.gitpathsrc/UniTask/Assets/Plugins/UniTask 空载性能测试 二、基础用法详解 三、基础用法扩展 四、进阶 五、VContainer简介 六、VContainer基础实例 方便快速查找 一、UniTask的简介和安装 项目地…...
uni-app 可视化创建的项目 移动端安装调试插件vconsole
可视化创建的项目,在插件市场找不到vconsole插件了。 又不好npm install vconsole 换个思路,先创建一个cli脚手架脚手架的uni-app项目,然后再此项目上安装vconsole cli脚手架创建uni-app项目 安装插件 项目Terminal运行命令:npm…...
HOperatorSet.GenRandomRegions 有内存泄漏或缓存,释放不掉
开发环境 VS2022 win7 halcon12 halcon18 随机生成100个园 不释放 private void butTemp_Click(object sender, EventArgs e) { butTemp.Enabled false; HOperatorSet.SetSystem("clip_region", "false"); …...
一维数组笔试题及其解析
Lei宝啊 :个人主页 愿所有美好不期而遇 前言: 数组名在寻常情况下表示首元素地址,但有两种情况例外: 1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小 2.&数组名,这里的…...
微信小程序源码
1:仿豆瓣电影微信小程序 https://github.com/zce/weapp-demo 2:微信小程序移动端商城 https://github.com/liuxuanqiang/wechat-weapp-mall 3:Gank微信小程序 https://github.com/lypeer/wechat-weapp-gank 4:微信小程序高仿QQ…...
Browserslist 信息和配置使用整理
我们可以在各种前端工程看到 Browserslist 的配置身影,看似简单但实际上可能会有暗坑导致线上兼容问题,借此文来整理下 Browserslist 的信息。 Browserslist 是由 Autoprefixer 团队维护的一个开源项目,用于自动处理 CSS 和 JavaScript 文件…...
Matlab 如何选择采样频率和信号长度
Matlab 如何选择采样频率和信号长度 1、概述 在实际信号分析中经常会遇到要分辨出频率间隔为 的两个分量,在这种情形中如何选择采样频率和信号的长度呢? 2、案例分析 设有一个信号由三个正弦信号组成,其频率分别为 ,即…...
TPTU: Task Planning and Tool Usage of Large Language Model-based AI Agents
本文是LLM系列文章,针对《TPTU: Task Planning and Tool Usage of Large Language Model-based AI Agents》的翻译。 TPTU:任务规划和工具使用的LLM Agents 摘要1 引言2 方法3 评估4 相关工作5 结论 摘要 随着自然语言处理的最新进展,大型语言模型&…...
【Spring IoC容器的加载过程】
加载配置文件 Spring IoC容器的配置通常以XML形式存储,并通过ResourceLoader和XmlBeanDefinitionReader类来加载。ResourceLoader主要负责加载Bean配置文件,而XmlBeanDefinitionReader则负责解析这些文件,将Bean定义封装为BeanDefinition对象…...
C++多文件类的声明与实现
...
王者荣耀进阶指南:如何用这个HTML5模拟器测试不同出装对英雄属性的影响
王者荣耀进阶指南:如何用HTML5模拟器优化英雄出装策略 在MOBA游戏的战术体系中,装备选择往往决定着团战的胜负走向。传统依靠经验积累的配装方式存在试错成本高、数据感知模糊等痛点,而现代HTML5技术构建的模拟器为玩家提供了可视化、即时反馈…...
Agent-S:重新定义人机协作的智能体框架技术解析
Agent-S:重新定义人机协作的智能体框架技术解析 【免费下载链接】Agent-S Agent S: an open agentic framework that uses computers like a human 项目地址: https://gitcode.com/GitHub_Trending/ag/Agent-S 在数字化转型加速的今天,人机协作的…...
模型加载与初始化(3)
前言 在 llama.cpp 中,模型推理主要基于 GGUF 格式展开。GGUF 是一种专为存储基于 GGML 及其相关执行器进行推理的模型文件而设计的格式。作为一种二进制格式,其设计初衷在于实现模型的高效加载与保存,并确保良好的易读性。本章将深入探讨大语…...
别再傻傻匀速拖滑块了!用Python模拟真人鼠标轨迹,轻松过Geetest验证码
突破验证码防线:Python模拟人类行为轨迹的实战艺术 验证码系统正变得越来越智能,Geetest等平台已经能够通过分析用户行为模式来区分人类和机器。传统的匀速滑块操作在这些系统面前几乎无所遁形。本文将带你深入理解现代验证码系统的工作原理,…...
SQL注入的分类靶场实践
SQL注入的分类靶场实践 前言 SQL 注入(SQL Injection)是一种常见且危险的 Web 安全漏洞,攻击者通过在输入字段中插入恶意 SQL 代码,能够绕过应用程序的验证机制,直接操纵数据库。本文将介绍 SQL 注入的分类ÿ…...
gemma-3-12b-it镜像开箱即用:3分钟完成多模态服务启动与测试
gemma-3-12b-it镜像开箱即用:3分钟完成多模态服务启动与测试 1. 快速了解Gemma-3-12b-it 如果你正在寻找一个既能理解文字又能看懂图片的AI模型,而且希望它能在普通电脑上运行,那么Gemma-3-12b-it就是为你准备的。 Gemma是Google推出的轻量…...
如何用d2s-editor高效管理暗黑破坏神2存档:终极可视化编辑指南
如何用d2s-editor高效管理暗黑破坏神2存档:终极可视化编辑指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款免费开源的Web版暗黑破坏神2存档编辑器,它将复杂的二进制存档文件转化为直…...
MedGemma-X部署教程:一行命令启动,开启自然语言交互的影像分析
MedGemma-X部署教程:一行命令启动,开启自然语言交互的影像分析 1. 为什么选择MedGemma-X? 在医疗影像分析领域,传统CAD系统往往只能提供简单的二分类结果(如"正常/异常"),而MedGemm…...
雯雯的后宫-造相Z-Image-瑜伽女孩效果可解释性探索:Attention Map可视化体式关注区域
雯雯的后宫-造相Z-Image-瑜伽女孩效果可解释性探索:Attention Map可视化体式关注区域 你有没有想过,AI在画一张瑜伽女孩图片时,它到底在“看”什么?当我们输入“新月式瑜伽体式”时,模型是理解了“手臂向上延展”这个…...
BGE-Large-Zh生产部署:Kubernetes集群方案
BGE-Large-Zh生产部署:Kubernetes集群方案 1. 引言 在人工智能应用快速发展的今天,高效稳定的模型部署方案成为企业成功的关键。BGE-Large-Zh作为优秀的中文语义向量模型,在生产环境中需要可靠的部署方案来保证服务的高可用性和可扩展性。本…...
