首页 > 其他分享 >spring的beanName规则

spring的beanName规则

时间:2023-04-10 17:58:25浏览次数:50  
标签:String spring AService beanName Character str 规则 shortClassName

背景

比如下面的 AService 为什么beanName是 AService ,首字母为什么没有小写。小写反而获取不到。

@Component  
public class AService {  
}

...
applicationContext.getBean("AService")

源码逻辑

protected String buildDefaultBeanName(BeanDefinition definition) {  
   String beanClassName = definition.getBeanClassName();  
   Assert.state(beanClassName != null, "No bean class name set");  
   // shortClassName 类名  
   String shortClassName = ClassUtils.getShortName(beanClassName);  
   // 首字母小写 (除前两个字母都大写之外)  
   // 以前的版本用的是这种方法  
   // Introspector.decapitalize(shortClassName);  
   /**    * 条件断点 "AService".toLowerCase().equals(shortClassName.toLowerCase())  
    */   
    return StringUtils.uncapitalizeAsProperty(shortClassName);  
}

public static String uncapitalizeAsProperty(String str) {  
   // !hasLength(str) 为空 null 或 ""   // (str.length() > 1 && Character.isUpperCase(str.charAt(0)) && Character.isUpperCase(str.charAt(1)))   长度大于1,且前两个字母大写  
   // 即:有以下两种情况的返回类名  
   // 1. 为空 null 或 ""   // 2. 长度大于1,且前两个字母大写 (比如: 类名 AService 则返回 AService ,而不是 aService)  
   if (!hasLength(str) || (str.length() > 1 && Character.isUpperCase(str.charAt(0)) &&  
         Character.isUpperCase(str.charAt(1)))) {  
      return str;  
   }  
   return changeFirstCharacterCase(str, false);  
}

调试截图

这里的 beanName 是 AService

gh

这里可以看到具体的判断逻辑

gh

规则总结

Java中 beanName 和数据库字段名字,不要让前两个字段都是大写。框架会对这进行判断然后特殊处理。
比如这里的 beanName 。

spring 不同的版本,可能代码位置不同,但是逻辑相同。

标签:String,spring,AService,beanName,Character,str,规则,shortClassName
From: https://www.cnblogs.com/xiaosiyuan88888888/p/17303735.html

相关文章

  • spring中的扫描机制
    背景项目中出现,一个bean在@ComponentScan注解的包下面却没有被扫描,并创建为bean的bug。所以需要了解spring的扫描机制。原因以及源码位置当项目里面有resources/META-INF/spring.components文件的时候,spring进入这个if判断if(this.componentsIndex!=null&&indexSupp......
  • spring中bean的生命周期
    背景bean在创建过程中会出现各种各样的循环依赖。了解spring如何用三级缓存机制解决循环依赖,解决spring没有解决的循环依赖。所以需要了解bean的生命周期原理。出现属性的循环依赖时,bean的生命周期spring用三级缓存机制来解决属性的循环依赖。以UserService和OrderService......
  • spring中事务的原理
    背景spring在使用事务的时候会出现事务失效的情况。这里了解spring中事务原理,以及事务失效的原理和解决方案。原因spring中事务是基于AOP的,如果不是代理对象执行的话就不会有事务。比如,加上@Transactional的事务方法,是被包裹起来的。publicclassUserServiceProxyextends......
  • SpringMVC怎么实现web端上传超大文件
    ​ 一、功能性需求与非功能性需求要求操作便利,一次选择多个文件和文件夹进行上传;支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传。刷新页面后继续传输。关闭浏览器后保留进度信息。支持文件夹批量上传下载,服务器端保留文件夹层级结构,服务......
  • 13-springcloud-eureka-9-Eureka集群注册中心打包发布
    在实际项目中,需要将Eureka发布到具体服务器上进行部署,打包部署其实和SpringBoot里面的一样,我们可以把其达成jar包,启动时对于properties文件,不同的环境激活不同的配置文件;运行:java-jarspringcloud-service-eureka.jar--spring.profiles.active=eureka8761java-jarspringclo......
  • 动力节点王鹤SpringBoot3笔记——第六章 远程访问@HttpExchange[SpringBoot 3]
    第六章 远程访问@HttpExchange[SpringBoot3]远程访问是开发的常用技术,一个应用能够访问其他应用的功能。SpringBoot提供了多种远程访问的技术。基于HTTP协议的远程访问是支付最广泛的。SpringBoot3提供了新的HTTP的访问能力,通过接口简化HTTP远程访问,类似Feign功能。Spring......
  • spring注解整合mybatis
    引入依赖<!--mybatis-spring与mybatis使用低版本适配--><!--https://mvnrepository.com/artifact/org.mybatis/mybatis-spring--><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version&......
  • Spring Security系列教程-初识Spring Security
    前言在开始学习SpringSecurity系列教程之前,小千先带大家来了解一下SpringSecurity,看看它到底是什么,有哪些功能,有什么特点,以及它与别的同类框架相比,有什么不同,我们以后学习任何一个新技术,其实都可以遵循"3W1H"法则,这样学习起来才能更有条理。一.SpringSecurity概念首先请各位跟......
  • 【Spring MVC】第一个程序
    添加Maven依赖:<!--spring核心类--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.8.RELEASE</version></dependency>&......
  • MIT 6.5840 2023 Spring(6.824)LAB1:MapReduce
    MIT6.58402023Spring(6.824)LAB1:MapReduce前言本次lab主要是完成一个基于RPC远程调用的单机单文件系统的简单MapReduce框架,并完成单词计数任务。基于golang实现,单Master,多Worker。实现worker的奔溃恢复(FaultTorrance),通过超时重新执行实现。主要的任务有,RPC调用参数及返回参数......