spring-core-4-33 | 命名Spring Bean:id和name属性命名Bean,哪个更好?

JDK 17与Spring Boot 3环境下MyBatis-Plus整合实战与进阶配置 在Java企业级应用开发中,ORM框架是连接应用与数据库的核心组件,它通过对象关系映射原理,将数据库表结构映射为Java对象,从而简化数据持久层操作,提升开发效率。MyBatis-Plus作为MyBatis的增强工具,在保留原生MyBatis灵活性的基础上,通过内置通用Mapper、分页插件等功能,进一步降低了CRUD操作的复杂度,其技术价值在于显著减少样板代码,并支持快速构建数据访问层。在实际应用场景中,尤其是在微服务架构下,开发者常需将其与最新的技术栈集成,例如使用JDK 17的现代语言特性和Sprin 阅读详情

命名Spring Bean

Bean 的名称

每个Bean 拥有一个或多个标识符(identifiers),这些标识符在Bean 所在的容器必须是唯一的, 但这里的唯一是指在其所在的BeanDefination或BeanFactory中是唯一的, 但并不是应用中是唯一的。

通常,一个Bean 仅有一个标识符,如果需要额外的,可考虑使用**别名(Alias)**来扩充。

在基于XML(不一定是基于XML文件, 也可能是网络资源) 的配置元信息中,开发人员可用id 或者name 属性来规定Bean 的标识符。

通常Bean 的标识符由字母组成,允许出现特殊字符。

如果要想引入Bean 的别名的话,可在name 属性使用半角逗号(“,”)或分号(“;”) 来间隔。

Bean 的id 或name 属性并非必须制定,如果留空的话,容器会为Bean 自动生成一个唯一的名称。

Bean 的命名尽管没有限制,不过官方建议采用驼峰的方式,更符合Java 的命名约定。

Bean 名称生成器(BeanNameGenerator)

• 由Spring Framework 2.0.3 引入,框架內建两种实现:

DefaultBeanNameGenerator:默认通用 BeanNameGenerator 实现
这里spring在一个小版本中引入了新的API, 在java中通常不允许这么做

• AnnotationBeanNameGenerator:基于注解扫描的BeanNameGenerator 实现,起始于

Spring Framework 2.5,关联的官方文档:

With component scanning in the classpath, Spring generates bean names for unnamed components, following the rules described earlier:
essentially, taking the simple class name and turning its initial character to lower-case.
在classpath下进行组件扫描(@Component或@Controller等), spring会为没有指定name的组件生成bean的名称, 遵循过去的原则:
就是驼峰原则

However, in the (unusual) special case when there is more than one character and both the first and second characters are upper case, the original casing gets preserved.
如果有一个或多个首字母和第二个字母是大写的情况, 会采用另一个API

These are the same rules as defined by java.beans.Introspector.decapitalize (which Spring uses here).
java.beans.Introspector.decapitalize 是 javaBeans的 API

代码示例

/**
 * • Bean 名称生成器(BeanNameGenerator)
 * • 由Spring Framework 2.0.3 引入,框架內建两种实现:
 *      DefaultBeanNameGenerator:默认通用BeanNameGenerator 实现
 *      (这里注意spring的API引用方式不太符合java的标准, java是不允许在小版本, 比如这里的 2.0.3引入API的
 *      所以我们说spring2 是 针对 spring2.0~2.5的版本, 不限定于是对 spring2.0.0这个版本)
 *
 *      DefaultBeanNameGenerator 点进去可以看出来是一个单例, 但没有私有化构造器, 考虑到了老版本的兼容问题
 *      至于名字的生成规则, 看方法里面:
 *      if (isInnerBean) {
 * 			// Inner bean: generate identity hashcode suffix.
 * 		    //	内部bean, 类名 + # + 一串hashcode
 * 			id = generatedBeanName + GENERATED_BEAN_NAME_SEPARATOR + ObjectUtils.getIdentityHexString(definition);
 *                }
 * 		else {
 * 			// Top-level bean: use plain class name with unique suffix if necessary.
 * 		    // 祖类bean, 类名 + 一串后缀如果有必要的话, 可以看uniqueBeanName()方法的实现
 * 			return uniqueBeanName(generatedBeanName, registry);
 *      }
 *
*      	public static String uniqueBeanName(String beanName, BeanDefinitionRegistry registry) {
 * 		    String id = beanName;
 * 		    int counter = -1;
 *
 * 		    // Increase counter until the id is unique.
 * 		    // 会在 BeanDefinitionRegistry 中计数, 如果已经有了, 会在类名 + # + 计数
 * 		    while (counter == -1 || registry.containsBeanDefinition(id)) {
 * 			    counter++;
 * 			    id = beanName + GENERATED_BEAN_NAME_SEPARATOR + counter;
 *          }
 * 		    return id;*
 * 		}
 *
 * • AnnotationBeanNameGenerator:基于注解扫描的BeanNameGenerator 实现,起始于
 *      Spring Framework 2.5,关联的官方文档:
 *      With component scanning in the classpath, Spring generates bean names for unnamed components,
 *      following the rules described earlier: essentially, taking the simple class name and turning its initial
 *      character to lower-case. However, in the (unusual) special case when there is more than one
 *      character and both the first and second characters are upper case, the original casing gets preserved.
 *      These are the same rules as defined by java.beans.Introspector.decapitalize (which Spring uses here).
 *      简单来说对于没有指定名称的Bean, 这里spring会按照驼峰来进行命名, 如果是特殊的, 比如连着两个大写字母的, 就会
 *      使用java.beans.Introspector.decapitalize这个API的规则
 *    AnnotationBeanNameGenerator显然是用来支持注解的, spring支持注解是从2.5开始的, 具体的实现看方法, 也是取得类名
 *
 *    public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
 *        // 相较于以前, AnnotatedBeanDefinition是一个新的beanDefinition实现
 * 		  if (definition instanceof AnnotatedBeanDefinition) {
 * 			  String beanName = determineBeanNameFromAnnotation((AnnotatedBeanDefinition) definition);
 * 			  if (StringUtils.hasText(beanName)) {
 * 				  // Explicit bean name found.
 * 				  return beanName;
 *            }
 *        }
 * 		  // Fallback: generate a unique default bean name.
 * 		  // 这里为了补偿老的API, 有一个补偿方法, 里面的实现与老的兼容
 * 		  return buildDefaultBeanName(definition, registry);
 * 	  }
 * */
Spring Boot 3.5.8与MinIO 8.5.9整合实战指南 对象存储是现代应用开发中的核心基础设施,MinIO作为高性能、S3兼容的开源解决方案,与Spring Boot框架的整合能大幅提升文件处理效率。本文从分布式存储原理出发,详解如何通过Java SDK实现文件上传下载、分片传输等核心功能,特别针对Spring Boot 3.5.8和MinIO 8.5.9版本组合进行性能调优,提供生产级的最佳实践方案。内容涵盖连接池配置、大文件处理策略、安全加固等关键技术要点,适用于云原生环境下的文档管理、多媒体存储等典型场景。 阅读详情

相关推荐

SSM+JSP场馆预约系统全栈开发:从数据库设计到事务管理实战

在Java Web开发领域,MVC分层架构是构建可维护、可扩展应用的核心设计思想。其原理在于将应用分为模型(Model)、视图(View)和控制器(Controller)三层,实现关注点分离。这一架构的技术价值在于提升代码复用性、简化测试并支持团队协作开发。在诸如场馆预约、电商后台等管理系统的应用场景中,MVC模式尤为关键。本文以经典的SSM(Spring+SpringMVC+MyBatis)框架搭配JSP技术栈为例,深入剖析一个场馆预约管理系统的实现。通过**事务管理**确保预约操作的原子性与数据一致性,

weixin_34248023的博客 376

Spring framework Day03:Bean 的 id 以及 name 属性

在 Spring 框架中,Bean 的 id 和 name 属性是用于标识和引用 Bean 实例的属性。它们可以用于配置和查找 Bean。

zhiqiuqiu2的博客 2493

spring-core-4.3.17.RELEASE

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

Spring Bean 注册顺序优先级总结

Spring Bean 注册顺序注册优先级,以及初始化顺序相关总结

gzt19881123的专栏 1万+

spring-core-4.3.0.RELEASE.jar (spring 4.3.0的核心jar包)

spring-core-4.3.0.RELEASE.jar (spring 4.3.0的核心jar包),Java开发中spring框架开发必须的依赖包。

Qwen2.5-VL模型微调实战:从零到部署的完整流程(附避坑指南)

本文详细介绍了Qwen2.5-VL视觉语言模型从零开始的完整微调与部署流程。内容涵盖使用LLaMA-Factory进行LoRA微调的关键参数配置与避坑指南,以及如何将训练好的模型权重合并,并最终利用vLLM高性能推理引擎进行部署,为开发者提供了一套可落地的实战方案。

oo7890的博客 591

Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)

Spring Bean名称生成规则,含源码解析

Jay的个人博客 2773

QGroundControl高级配置与自定义功能实战指南

本文深入探讨了QGroundControl(QGC)的高级配置与自定义功能,为无人机开发者、系统集成商和高级用户提供实战指南。内容涵盖从品牌界面定制、自定义MAVLink消息处理,到插件开发与自动化部署的全流程,旨在帮助用户解锁QGC的隐藏潜力,打造专属的行业解决方案。

weixin_29234509的博客 239

Spring中Bean的命名问题及ref和idref之间的区别

一直在用Spring,其实对其了解甚少,刚去了解了一下Spring中Bean的命名问题以及ref和idref之间的区别,略作记录,以备后查。 Spring中Bean的命名 1、每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一; 2、可以不指定id属性,只指定全限定类名,如: 此时需要通过接口getBean(Class

竹叶青的专栏 2036

Virtuoso ADE Explorer实战技巧:从基础操作到高级仿真

本文深入解析了Virtuoso ADE Explorer在模拟电路仿真中的核心价值与实战技巧。作为Cadence平台的专业工具,它专为高效、系统化的设计空间探索而生,能大幅提升PVT验证、参数扫描和蒙特卡洛分析的效率。文章从基础界面操作、并行仿真管理,到高级的参数扫描、数据报告生成及蒙特卡洛结果深度剖析,提供了全面的避坑指南与工作流优化建议,帮助工程师从重复劳动中解放,专注于电路设计与性能优化。

ios99的博客 898

FPGA实战:从零构建eMMC控制器(Verilog篇)

本文详细介绍了如何使用Verilog从零构建FPGA上的eMMC控制器,涵盖eMMC接口基础、命令系统解析、关键模块设计及性能优化技巧。通过实战案例,帮助开发者掌握高速数据存储解决方案,提升嵌入式系统开发能力。

weixin_26802933的博客 297

Spring bean命名规则

Spring bean命名规则

qq_35987023的博客 321

Atlas 300I Duo - vllm部署Qwen3-VL-8B-Instruct

本文介绍了在Ascend NPU环境下部署Qwen3-VL-8B大语言模型的步骤。主要包括:1)安装驱动、docker和vllm镜像;2)创建特权容器并挂载设备与目录;3)进入容器安装指定版本的transformers;4)设置环境变量和NPU卡配置;5)启动vllm服务;6)测试API接口。部署过程涉及多块NPU卡的使用,需注意内存碎片化问题,最终通过vllm框架提供模型推理服务。

m0_50105717的博客 1561

Spring Boot在线挂号与排队系统:从业务流程到并发控制实践

在Java Web开发中,Spring Boot凭借其简洁的配置和快速的开发效率,成为构建业务系统的首选框架。一个典型的在线挂号系统不仅涉及CRUD操作,更核心的是号源扣减、排队顺序和状态流转等设计难点。本文从数据库表结构、事务控制、MyBatis-Plus条件更新等方面,解析如何通过原子操作防止超卖,并利用状态机管理挂号记录的生命周期。这类方案已广泛应用于社区诊所、医院门诊等场景,能够有效缓解就诊高峰排队压力,提升医疗资源配置效率。通过一个完整的社区诊所挂号排队案例,读者可以掌握Spring Boot项目

weixin_34199405的博客 391

零基础实战:云开发家政维修小程序搭建指南

欢迎来到这本关于构建家政维修小程序的电子书!在当今数字化的浪潮中,线上服务已成为我们生活中不可或缺的一部分。从点餐购物到居家维修,人们越来越习惯通过指尖轻点来解决各种需求。正是基于这样的背景,我们希望通过这个系列,手把手地带领大家从零开始,搭建一个功能完备、体验流畅的家政维修平台。这不仅仅是一本技术教程,更是一次将想法变为现实的探索之旅。我们将深入浅出地讲解如何运用云开发等现代技术,实现从用户下单、支付,到客服派单、工人接单,再到订单完成和权限管理等一系列核心业务流程。

低代码布道师的博客 3430

概念解析 | 雷达动态范围

这里存在一个动态范围的问题:强雷达发射信号和弱目标反射信号存在非常大的功率差异,比如传统的脉冲多普勒雷达动态范围可达90dB以上。随着上述技术的发展,预计未来十年雷达接收机动态范围将达到120dB以上,届时雷达的监视能力将得到极大增强。简单来说,雷达动态范围越大,表示接收机噪声越低,对强信号过载保护能力越强,就越能检测到弱信号目标。此外,部分新概念雷达对动态范围提出新的需求,如被动雷达动态范围需大于100dB。当前,随着阵列雷达和数字雷达技术的发展,对雷达接收机动态范围提出了更高要求。

NLOS的博客 1051

Lithe-IDEA:专为Spring Boot Java开发打造的极简IDE

IDE(集成开发环境)是程序员编写、调试和运行代码的核心工具,其本质是语言支持、项目构建、调试能力和框架集成的有机组合。现代IDE普遍采用插件化架构与抽象语法树(AST)解析技术,以实现智能提示、跨文件跳转和重构等高级功能,但这也带来启动慢、内存占用高、学习成本陡峭等问题。针对Java初学者、Spring Boot轻量级项目维护者及面试备考者,轻量级IDE应聚焦‘可运行的最小闭环’:基于JDK原生能力快速启动,通过注解识别而非全量语义分析实现Spring Boot感知,用内存热加载替代磁盘编译提升响应速度。

weixin_34068198的博客 212

013 PID参数整定:Ziegler-Nichols法

几年前在调试一台伺服压机,客户要求位置精度±0.01mm,响应时间小于50ms。我按照教科书上的经验值设了P=1.5,I=0.02,D=0.01,结果电机一启动就开始尖叫,位置超调直接干到0.3mm,然后开始震荡,像极了喝醉的舞者。现场工程师看我的眼神,就像在看一个刚毕业的实习生。那次之后我明白了一个道理:PID参数不是靠猜的,也不是靠经验公式硬套的。你需要一个系统的方法,而Ziegler-Nichols法就是那个让你从“瞎调”走向“有章可循”的起点。

m0_50546716的博客 99

Spring Boot 3 + JDK 17 集成 MyBatis-Plus 实战:从基础CRUD到高级特性

在Java企业级应用开发中,ORM框架是连接对象模型与关系数据库的关键技术,它通过映射机制简化数据持久化操作。MyBatis-Plus作为MyBatis的增强工具,在保留原生SQL灵活性的基础上,通过通用Mapper、条件构造器等组件,实现了近乎零SQL的单表操作,其核心原理在于动态代理与注解驱动。这一设计显著提升了开发效率,降低了样板代码量,对于构建高可维护性的数据访问层具有重要价值。在实际应用场景中,尤其是在现代技术栈如Spring Boot 3与JDK 17的组合下,开发者常需处理分页查询、枚举映射、

weixin_30443731的博客 564

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【LangChain4J-09】开发学习知识点

本质是【三】工具循环的升级:模型拿到任务,自己决定调哪些工具、调几次,直到能回答。A:稳定内容(system/RAG/样例/工具 schema)放最前,易变内容(时间/本轮问题)放最后;prompt 归一化。A:需要精细控制防跑飞(maxSteps)、SSE 逐字事件粒度、可观测埋点(tool_count/first_token_ms),声明式在这些点上的可控性不足。:稳定不变的内容(人设、规则、RAG 文档、样例)放最前,易变内容(时间戳、本轮问题)放最后——这直接决定【缓存章节】的命中率。

weixin_44823875的博客 322

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

SaToken集成Redis实现分布式会话管理:原理、配置与生产实践

在分布式系统架构中,会话管理是保障用户状态一致性的核心技术。传统基于服务器内存的Session方案在集群环境下存在状态丢失问题,因此需要引入外部共享存储来实现会话数据的持久化与共享。Redis作为高性能的内存数据库,凭借其基于内存的极速读写、支持数据持久化以及原生分布式特性,成为解决分布式会话问题的理想选择。通过将权限认证框架SaToken的会话、令牌和权限数据托管给Redis,开发者可以轻松构建具备弹性伸缩能力的应用系统。本文聚焦于SaToken与Redis的深度集成,详细解析其核心原理、配置步骤及生产环

weixin_34389926的博客 334

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

面试问题总结

文章目录1.abstract和interface异同2.构造方法3.final关键字作用4.重写和重载的区别4.1重载4.2重写5.this关键字6.封装的作用,实现封装的步骤7.封装中的getter和setter方法分别作用7.1setter方法7.2getter方法8.Mybatis-plus与Spring Data JPA9.装箱和拆箱9.1装箱9.2拆箱10.ArrayList底层原理11.反射12.Filter13.$与#的区别14.js中的DOM对象与jQuery中的DOM区别15.四大元注解1

肥猫不是猫 1109

SSM框架电商系统毕业设计实战:从零构建农产品销售平台

在Java企业级开发领域,SSM(Spring+Spring MVC+MyBatis)框架组合因其清晰的层次结构和灵活的控制能力,成为构建Web应用的主流技术选型。其核心原理在于Spring的IoC容器管理对象生命周期,Spring MVC处理请求分发,MyBatis负责数据持久化,三者协同实现了高内聚、低耦合的架构设计。这种架构的价值在于提升了代码的可维护性和扩展性,尤其适用于电商、管理等需要处理复杂业务逻辑和数据交互的应用场景。本文聚焦于如何将这一技术体系应用于毕业设计实践,以农产品销售系统为例,深入剖

weixin_34015336的博客 454

基于SSM框架的景区信息管理系统开发实战与毕业设计指南

SSM框架是Java Web开发中经典的轻量级组合,它通过Spring的IoC容器管理对象依赖、Spring MVC处理Web请求、MyBatis简化数据库操作,共同构建了分层清晰、易于维护的企业级应用架构。这种架构模式在需要快速迭代、数据驱动的中小型项目中极具技术价值,广泛应用于电商、OA、CRM及各类信息管理系统。本文以景区信息管理系统这一典型应用场景为例,深入剖析如何将SSM框架整合应用于实际业务开发,并重点解决环境配置、框架整合、数据库设计等常见痛点。通过结合用户管理、票务预订等核心模块的实现,为开

weixin_30455023的博客 388

MyBatisPlus mybatis-plus-join

一、MyBatis Plus 介绍 MyBatis Plus是国内人员开发的 MyBatis 增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 MyBatis Plus 的核心功能有:支持通用的 CRUD、代码生成器与条件构造器。 通用 CRUD:定义好 Mapper 接口后,只需要继承BaseMapper<T>接口即可获得通用的增删改查功能,无需编写任何接口方法与配置文件 条件构造器:通过EntityWrapper<T>(实体包装.....

hudeyong926的专栏 1万+

基于SSM框架的校园零食商店系统设计与实现全解析

在Java Web开发中,SSM框架(Spring、Spring MVC、MyBatis)是主流的轻量级企业级开发组合,它通过IoC容器管理对象依赖、AOP实现事务切面、ORM简化数据持久化,形成了清晰的分层架构。理解SSM的核心原理,不仅能解决传统Servlet开发中代码耦合度高、维护成本大的问题,也是快速掌握Spring Boot等现代框架的基础。基于SSM构建的校园零食商店系统,覆盖商品浏览、购物车、订单管理等典型电商业务,是毕业设计中的经典选题。从数据库表结构设计到拦截器权限控制,从项目环境搭建到常

weixin_34378767的博客 301
上一篇: spring-core-4-32 | BeanDefinition元信息:除了Bean名称和类名,还有哪些Bean元信息值得关注?
下一篇: spring-core-4-34 | Spring Bean的别名:为什么命名Bean还需要别名?
sunforraining
博客等级 码龄9年 13粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值