当前位置: 首页 > article >正文

Springboot 组件注册 条件注解

组件注册方式ConfigurationBean1、作用Bean 是 Spring 中手动注册 Bean 的核心注解作用在方法上告诉 Spring 该方法的返回值会被 Spring 容器管理成为 IoC 容器中的一个 Bean2、自定义bean作用名Bean 的默认名称是方法名比如你代码中方法名是 user01但可以通过 Bean(userhaha) 自定义 Bean 名称 容器启动时或首次获取 Bean 时会执行该方法并将返回对象存入 IoC 容器后续获取 Bean 时直接从容器取单例或重新执行方法多例Bean(userhaha) // 自定义Bean名称为userhaha替代默认的user01 public User user01(){...}3、Scope 用于指定 Bean 的作用域生命周期范围核心作用是控制 Spring 容器创建 Bean 实例的数量和时机。作用域说明singleton默认单实例IoC 容器启动时创建 Bean懒加载除外全局仅一个实例prototype多实例每次从容器获取 Bean 时都会重新执行Bean方法创建新实例requestWeb 环境每个 HTTP 请求创建一个新实例sessionWeb 环境每个 HTTP Session 创建一个新实例举例1、创建一个UserConfig配置类Configuration,然后在其中定义bean Bean(userhaha)再指定为多实例 Scope(prototype)Configuration public class UserConfig { Bean(userhaha) Scope(prototype) public User user01(){ var usernew User(); user.setId(1); user.setName(张三); return user; } } ​在启动类中测试beanuserhaha是单例还是多例。SpringBootApplication MapperScan(org.example.mybatisdemo.mapper) public class MybatisDemoApplication { ​ public static void main(String[] args) { var iocSpringApplication.run(MybatisDemoApplication.class, args); /*for(String name:ioc.getBeanDefinitionNames()){ System.out.println(name); }*/ Object userHaha1ioc.getBean(userhaha); Object userHaha2ioc.getBean(userhaha); System.out.println(userHaha1userHaha2); } ​ }注解 / 配置核心作用实例数量执行结果你的代码Bean(userhaha)注册 Bean 并指定名称取决于 Scope-Scope(prototype)多实例作用域每次 getBean 新实例userHaha1userHaha2 → false默认无 Scope单实例作用域singleton全局唯一实例userHaha1userHaha2 → trueComponent上篇博客已介绍过。Import1、作用在 Spring 的开发场景中我们通常使用 Component、Service 或 Bean 来将类注册到 IoC 容器。但这些方式都有局限性Component 系列必须能修改目标类的源码添加注解。Bean 方法需要在配置类中手写实例化代码对于大量类或复杂构造函数显得繁琐。Import的出现正是为了解决以下痛点第三方类无源码如 Druid 连接池中的FastsqlException你无法在其源码上加Component。批量快速注册需要一次性将多个工具类或配置类导入容器而不想写一堆Bean方法。解耦配置将组件的扫描与定义分离实现模块化配置。一句话定义Import是 Spring 提供的一种“直通式”注册机制它允许开发者直接将指定的 Class 对象“硬塞”进 IoC 容器无需目标类配合也无需手动编写工厂方法。2、工作原理当 Spring 容器启动并扫描到带有 Import(XXX.class) 的配置类时它会直接实例化 XXX 类调用其默认构造函数并将其作为 Bean 注册到容器中。3、组件命名规则这是 Import 与普通 Component 最大的区别之一默认名称目标类的全限定名Full Qualified Name。例如导入 com.alibaba.druid.FastsqlException其在容器中的 Bean ID 默认为 com.alibaba.druid.FastsqlException。条件注解ConditionalOnXxxConditionalOnClass如果类路径中存在这个类则触发指定⾏为ConditionalOnMissingClass如果类路径中不存在这个类则触发指定⾏为ConditionalOnBean如果容器中存在这个Bean组件则触发指定⾏为ConditionalOnMissingBean如果容器中不存在这个Bean组件则触发指定⾏为ConditionalOnBeanvalue组件类型name组件名字判断容器中是否有这个类型的组件并且名字是指定的值场景 ● 如果存在 FastsqlException 这个类给容器中放⼀个 Cat 组件名cat01 ● 否则就给容器中放⼀个 Dog 组件名dog01 ● 如果系统中有 dog01 这个组件就给容器中放⼀个 User组件名zhangsan ● 否则就放⼀个User名叫lisiConfiguration public class AppConfig { ​ ConditionalOnClass(namecom.alibaba.druid.FastsqlException) Bean public Cat cat01(){ return new Cat(); } ConditionalOnMissingClass(com.alibaba.druid.FastsqlException) Bean public Dog dog01(){ return new Dog(); } ​ } 启动类中 SpringBootApplication MapperScan(org.example.mybatisdemo.mapper) public class MybatisDemoApplication { ​ public static void main(String[] args) { for (String s : ioc.getBeanNamesForType(Cat.class)) { System.out.println(cat:s); } for (String s : ioc.getBeanNamesForType(Dog.class)) { System.out.println(dog:s); } } }总结1、本文首先介绍了springboot的组件注册Bean;Component;ImPort1)介绍了bean的作用自定义bean作用名的方式默认是方法名还分享了Scope的作用用于指定 Bean 的作用域指明 Spring 容器创建 Bean 实例的数量和时机介绍四种作用域singleton默认,prototype,request,session)及其说明。2还介绍了Import的作用向 IoC 容器注册组件解决Component和Bean的局限工作原理组件命名规则目标类的全限定名2、还列出了一些条件注解ConditionalOnXxxConditionalOnClassConditionalOnMissingClassConditionalOnBean等等并举了一个例子来演示ConditionalOnClass和ConditionalOnMissingClass注册组件的使用。3、并介绍了如何在配置文件中为一个java对象赋值将其注册为bean再使用ConfigurationProperties指定前缀

相关文章:

Springboot 组件注册 条件注解

组件注册方式:ConfigurationBean1、作用Bean 是 Spring 中手动注册 Bean 的核心注解,作用在方法上,告诉 Spring: 该方法的返回值会被 Spring 容器管理(成为 IoC 容器中的一个 Bean);2、自定义be…...

什么是系统函数 内核态与用户态

系统函数(即系统调用)是操作系统提供给用户程序的、访问底层资源(如 CPU、内存、磁盘、网络等)的唯一合法入口。任何试图绕过系统调用、直接访问底层资源的行为,在现代操作系统中都是被硬件和内核协同禁止的——不是“很难”,而是“根本不可能”。 ✅ 完全正确!而且这句…...

库早报|OPPO:无感折痕屏背后有两项3D打印技术;威拉里三期项目开工;五轴3D打印机TOP.E R1将亮相TCT亚洲展

2026年3月13日 星期五你在打印时错过了什么,快来看看吧!01OPPO:无感折痕屏离不开两项3D打印技术3月11日,OPPO举办Find N6无感折痕技术沟通会,公布了“无感折痕、久用平整”背后的技术细节。其中,新一代钛合…...

LabVIEW 双通道示波器:从源码到综合分析的奇妙之旅

labview 双通道示波器源码,电压及时间测量,频谱分析,在电子测量与信号分析的领域,LabVIEW 以其图形化编程的便捷性和强大功能,成为众多工程师和爱好者的得力工具。今天咱就来唠唠 LabVIEW 双通道示波器源码&#xff0c…...

高性价比多片锯公司

在木工加工行业,无论是实木开料、地板生产,还是托盘、龙骨制造,企业对核心设备——多片锯的需求始终围绕三个核心:高精度、高稳定、高效率。然而,市场常见痛点也异常突出:低端设备价格诱人但故障频发、损耗…...

Shopee买家账号注册与养号实战经验:跨境电商账号体系搭建思路

在跨境电商不断发展的今天,Shopee 已成为东南亚及多个新兴市场的重要电商平台。对于从事跨境业务的人来说,Shopee买家账号的注册与养护同样十分关键。一个稳定、安全的买家账号,不仅能保障日常使用的顺畅,也有助于长期的账号管理与…...

样件合格却被判“死刑”?复盘一次比亚迪SQE的现场审核,这六个字是关键

在制造业干久了,你会发现一个怪象:很多老板把“质量”挂在嘴边,却把“合规”扔在脑后。前两天去一家精密结构件厂调研,这场景又在我脑海里过了一遍。老赵做五金加工十几年,技术底子厚得很,甚至拿下了某国产…...

矿井工作面的数学游戏:用代码拆解气固耦合

煤与瓦斯气固耦合模型案列分析讲解假设你面前有一块煤,内部藏着蠢蠢欲动的瓦斯气体。当采煤机开始作业,煤体变形导致瓦斯压力变化,这种动态过程就像在玩一场物理引擎的即时战略游戏——气固耦合模型就是你的操作界面。今天我们用Python写个简…...

2026年AI写作工具深度评测:从效率提升到专业赋能的全面指南

在内容创作行业深耕五年,我见证了AI写作工具从概念到实用的全过程。如今,AI不再是遥不可及的技术概念,而是每个内容创作者的必备利器。本文将通过详实的分析和实测数据,带你深入了解主流AI写作工具的核心价值与应用场景。 一、AI…...

政企宽带所有终端网页打开慢(但能打开)的排查思路

(2026年最新实用版,按从快到慢、从内到外顺序,90%问题能在前3步解决) 因为是全公司终端都慢,基本排除单个电脑/手机问题,重点排查 DNS 公司网关/防火墙 运营商链路 三大主因。 政企宽带(电信…...

【程序员转行】AI会取代程序员?真相是:不会用大模型的才会被淘汰

“AI会不会抢走我的程序员工作?” 这大概是当下每一位技术人睡前都可能闪过的疑问。尤其是在技术迭代日新月异的IT圈,当你亲眼看到AI能自动生成规范代码、精准定位隐藏Bug、甚至辅助完成架构设计初稿时,难免会陷入深深的焦虑:自己…...

2026权威盘点:毕业论文降重工具谁最靠谱?

摘要/前言: 2026年,AI写作已进入“无间道”模式。高校的检测系统不仅查重,更在后台静默运行“AIGC成分分析”。这意味着,你用普通AI工具“降重”的行为,本身就可能成为“学术不端”的证据。老方法彻底失效,…...

git创建新分支并回退

确认状态首先先确认当前git状态,确认同步:git status查看当前分支:git branch创建新分支并切换到新分支:git checkout -b feature/rollback-to-backend-frontend-1确认当前为新分支:git branch回退:git res…...

计算有功功率和无功功率

微电网,下垂控制,两并联虚拟阻抗下垂控制,实现了有功功率共享,效果好,有参考文献。微电网技术近年来发展迅速,成为分布式能源系统的重要组成部分。然而,微电网中的多个发电单元如何协调运行&…...

用了五年的Aliprice突然改名了?说说我和这个插件的故事

早上照常打开Chrome准备干活,突然发现工具栏里那个熟悉的橙色图标变了。定睛一看,“AliPrice”变成了“AiPrice”。第一反应是插件出错了?重启浏览器,还是新的图标。去官网看了眼,才发现是真的改名了。说实话&#xff…...

RAG技术实战:让大模型拥有实时查阅外部知识库的能力,解决AI幻觉与知识更新难题

RAG技术是解决大模型知识更新缓慢和幻觉问题的关键技术。它通过检索增强生成,让模型先检索相关文档再生成答案,而非仅依赖静态记忆。文章详细介绍了RAG的三大核心阶段:构建数据索引(文档加载、分块、向量化、存储)、检…...

PUA OpenClaw:147只龙虾亲测有效!

最近在GitHub上刷到一个特别有意思的项目,叫PUAClaw,目前已经拿到1700的Star。 说实话,刚看到这个名字的时候我是懵的,PUA?Claw(龙虾钳)?这俩词怎么凑到一起了?点进去一看才发现,这是一个专门研究"怎么让AI更听话"的开源文档库,而且整个项目的风格相当硬核——用R…...

【论文解读】MAML:模型无关的元学习框架

玄同 765 大语言模型 (LLM) 开发工程师 | 中国传媒大学 数字媒体技术(智能交互与游戏设计) CSDN 个人主页 | GitHub Follow 关于作者 深耕领域:大语言模型开发 / RAG 知识库 / AI Agent 落地 / 模型微调技术栈:Python | R…...

线程控制--1

一、进程与线程的1.1 引子进程是房子,线程是房子里的人进程之间是独立的、解耦的(不同房子)线程属于同一个房子,共享房子里的资源1.2 共享 vs 独占线程独占的数据(不是绝对独占,只是当前分配给你&#xff0…...

小程序图片加载优化方案

一、背景背景:小程序在加载的时候容易出现图片加载缓慢的问题项目图片使用现状分析1. 图片类型与来源类型来源处理方式静态资源图片baseImgUrl 相对路径服务器静态资源OSS图片后端返回的阿里云OSS地址已添加processOssImage自动转webp服务器图片BASE_FILEURL 文件…...

2026年七大闷声赚钱的AI技能

AI 技能差距:过去 20 年最大的财富风口在这个 AI 席卷全球的时代,我们正在目睹过去二十年来最大的财富分配机会。尽管 AI 的热度居高不下,但一个残酷的现实是:绝大多数人依然完全闲置着这项技术。他们或许听说过,却从未…...

基于电压电流双闭环和模糊PID双环的VIENNA整流器仿真研究

基于电压电流双闭环的vienna整流器的仿真(SVPWM调制) 基于模糊pid双环的vienna整流器仿真 适用于毕业,查重率10%以下 注:仿真页数34ppt随着可再生能源的广泛应用,高效、可靠的能量转换技术成为研究热点。VIENNA整流器作为一种先进…...

实习面经摘录(六)

来自网络,供个人学习,侵删 某滴 先完成再完美1.JVM内存结构也被定义为 运行时数据区,JVM内存结构分为两大类:线程私有区域/线程共享区域3.内存泄漏怎么处理排查常见内存泄漏场景静态集合类:不断add却从不remove。未关闭…...

导师推荐!AI论文写作软件 千笔写作工具 VS PaperRed,专为本科生量身打造!

随着人工智能技术的迅猛迭代与普及,AI辅助写作工具已逐步渗透到高校学术写作场景中,成为本科生完成毕业论文不可或缺的智能助手。越来越多的学生在面对繁重的写作任务时,开始依赖各类AI工具来提升效率、简化流程。然而,市场上AI写…...

实测对比后!倍受青睐的降AIGC软件 —— 千笔AI

在AI技术迅速渗透学术写作领域的当下,越来越多的本科生开始借助AI工具提升论文写作效率。然而,随着查重系统对AI生成内容的识别能力不断提升,如何有效降低AI率和重复率成为许多学生面临的难题。面对市场上五花八门的降AI工具,选择…...

MVI46-AFC串行通讯模块

MVI46-AFC串行通讯模块是一种用于工业自动化系统的数据处理与通信模块,通常安装在SLC系列PLC平台中。该模块主要用于流量计算与串行数据通信,可对来自现场仪表的流量、压力、温度等信号进行计算和处理,并通过串行接口实现与其他控制设备或监控…...

[算法][力扣3]无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。示例 1:输入: s "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。注意 "bca" 和 "cab" 也是正确答案。示例 2…...

《基于非对称纳什谈判的多微网电能共享运行优化策略》完美复现 仿真平台:MATLAB CPLEX...

《基于非对称纳什谈判的多微网电能共享运行优化策略》完美复现 仿真平台:MATLAB CPLEXMOSEK/IPOPT 主要做的是微网间基于非对称纳什谈判的P2P电能交易共享问题,基于纳什谈判理论建立了多微网电能共享合作运行模型,进而将其分解为微网联盟效益…...

Power BI技巧:度量值整理指南

在Power BI数据建模过程中,随着业务复杂度提升,度量值数量会不断增多。杂乱无章的度量值不仅会增加查找成本,还会影响团队协作效率。 今天就来分享一套度量值整理的最佳实践,帮你打造清晰、高效的模型结构。 度量值与列的核心区别…...

Canal同步完了,怎么验证数据对得上?

比起同步失败,较为棘手的是“看似成功”作为一名 DBA,深夜收到开发的消息:“Canal 同步任务跑完了,准备明天切业务,你帮看看数据对不对得上?”你熟练地登录数据库,准备手工核对几张核心表的数据…...