首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

聊聊spring bean名称命名的那些事儿

01 前言 用了多年spring,一直想当然把spring默认的beanName当成是类名的首字母小写,比如HelloService其beanName为helloService。...(ABService.class) 能成功获取到bean,说明ABService是有注入到IOC容器中,但是为啥用aBService获取不到bean?...Character.toLowerCase(chars[0]); return new String(chars); } 其实从代码我们就很容易看出答案了,如果类名前两个或以上个字母都是大写,则beanName类名就一样了...* @return The decapitalized version of the string. */ 04 总结 通过扫描bean注解注入IOC时,如果不指定bean名称的默认规则是类名的首字母小写...,如果类名前两个或以上个字母都是大写,那么bean名称与类名一样。

22720

聊聊spring bean名称命名的那些事儿

前言 用了多年spring,一直想当然把spring默认的beanName当成是类名的首字母小写,比如HelloService其beanName为helloService。...getBean(ABService.class) 能成功获取到bean,说明ABService是有注入到IOC容器中,但是为啥用aBService获取不到bean?...Character.toLowerCase(chars[0]); return new String(chars); } 其实从代码我们就很容易看出答案了,如果类名前两个或以上个字母都是大写,则beanName类名就一样了...* @return The decapitalized version of the string. */ 总结 通过扫描bean注解注入IOC时,如果不指定bean名称的默认规则是类名的首字母小写...,如果类名前两个或以上个字母都是大写,那么bean名称与类名一样。

91041
您找到你想要的搜索结果了吗?
是的
没有找到

Spring 注解 XML 配置文件重复定义 Bean,会怎样?

一、背景 今天一个偶然的机会,发现某个同事在使用 Spring 的时候,有一个 Bean 在类上既加上了 @Service 注解,又在 Spring 的 XML 配置文件中也加了 的定义。...读取第一个 bean名称时, usedNames 集合里面已经有了,就会报这个错误 通过阅读源码调试,我们可以发现在 xml 中重复定义会有 bean 名称的重复检查。...三、启示 3.1 注解 XML 哪种更好? Spring 使用注解使用 xml 的方式定义 bean 都有各自的优缺点,没有绝对的好坏,具体要根据实际情况需求来选择。...一般来说,注解方式更简洁、方便、灵活,但也可能造成代码配置的耦合,而 xml 方式更清晰、规范、可扩展,但也可能造成配置文件的冗长复杂。...如果出现两个相同名称的实例,Spring 会覆盖其中一个,xml 优先级高于注解;xml 中同时配置两个相同 id 的 bean,直接校验不通过报错。

98830

深入分析 SpringBean 名称的加载机制

目录 前言 通过前文:《深入分析-Spring BeanDefinition构造元信息》一文我们可以了解到:Spring Framework共有三种方式可以定义Bean,分别为:XML配置文件、注解、Java...配置类, 从Spring Framework 3.0(2019年12月发布)版本开始推荐使用注解来定义Bean,而不是XML配置文件,因此,本文的重点是放在探索Spring Framework如何从使用注解定义的...它在Spring容器初始化时,通过扫描注解配置的组件类,并且根据其定义的命名规则生成Bean名称,然后将这些名称与对应的Bean实例关联起来。...默认Bean名称生成策略部分:实现了buildDefaultBeanName()方法getComponentAnnotation()方法,用于生成默认的Bean名称。...总结 AnnotationBeanNameGenerator 的优点有: 自动生成唯一的 Bean 名称,避免了手动命名时出现重名的情况; 提高了代码可读性可维护性,因为通过注解来指定 Bean 名称可以更直观地表达

15410

Spring配置文件结构对于生成Bean的影响

这一次,主要是深入一点了解Spring配置文件结构搭配对于Bean装配的影响。 首先,我们设定一个简单的场景:播放器播放歌曲。...,只定义了一个BeanBean id名称为yeHuiMei(方法名),同时也将相关的属性设置完毕。...尽管在CDPlayer中的配置文件通过相关的语法制定了CD Bean的选择(@Qualifierref),但是我们可以看到文件本身并没有明确的引入另外的配置文件,所以在IDEA中通常会有这样的提示:...所以实际上除了这个配置文件意外的其他bean都没有被Spring生成并放入Bean容器中。...当我们配置了Spring配置文件并将其加载进来了,当Spring遇到@Autowired等注入注解的时候,就会为我们注入Bean

9410

spring中的Bean (@Bean、@Configuration@TestConfiguration)

参考 spring中@Bean及@Autowired自动装配 此文比较清晰 springboot--常用注解--@configration、@Bean 1. Bean(不仅仅指@Bean)是什么?...beanspring中可以理解为一个对象。理解这个对象需要换一种角度,即可将spring看做一门编程语言,@Beanspring语言声明对象的标识。...spring启动过程中会自动扫描注解,当遇到能产生Bean的注解(见下方列表)后,会将注解的类自动实例化(自动扫描及实例化只进行一次),之后将这个类的实例放到spring框架的容器中,当需要使用时(自动装配...@Autowired (通过类装配,一般用这个) @Resource (通过自命名装配) (两者区别见:Spring注解ResourceAutowired区别对比) 6....@Configuration@TestConfiguration @Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。

1.8K20

Spring容器Bean加载

Spring容器的IOCDI概念 IOC(控制反转):对于组件的控制权进行了转移,传统的程序设计是由客户端new出对象,是程序主动创建所依赖的对象。...XML是配置文件,定义了Spring标签定义; Resource是Spring对于资源的抽象; Document是从Resource中读取的XML定义解析为Document; BeanDefinition...方法,从方法的名称上很容易理解,这个方法是在Bean的属性都设置值后被调用,用于完成一些初始化工作。...当然,在Spring配置文件中init-method的配置也是在Bean的属性都设置值后被调用,用于完成一些初始化工作,不过在执行顺序上,接口的方法先于配置。...同样,在Spring配置文件中destroy-method配置也完成同样的工作,不过在执行顺序上,接口的方法先于配置。

70730

Spring中@Component@Bean

Spring管理Bean的方式 注册Bean 装配Bean Spring实现管理的方式 自动配置(隐式) 使用JavaConfig的方式(显式) 使用XML配置的方式(显式) 引用自:《Spring实战...组件扫描自动装配组合使用可使显式配置降低到最少 一、自动配置的实现方式 在自动配置的方式中,使用@Component告诉Spring,我是一个bean,你要来管理我,然后使用@AutoWired注解去装配...@Component的作用就是把普通的pojo实例化到Spring容器中,相当于配置文件中的,所以@Component这种方式适用于程序员自身开发的组件(有源码...显式配置分为JavaConfig使用xml配置文件两种形式,在Spring MVC框架中会使用到xml配置,这种方式配置比较繁琐,后逐步被Spring Boot取代,在Spring Boot中会采用JavaConfig...总结: @Compent@Bean到底区别在哪?

1.3K10

QA模式详解Spring核心(一)DIIOC

Spring可以让我们从“plain old Java objects”(POJO)中构建应用程序通过非侵入性的POJO实现企业应用服务。(关于这一点,如果你比较熟悉Spring的话,会感受到的。...《Spring4.x实战》一书中写的是“某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定,即由Spring容器借助Bean的配置来进行控制”。...如果你使用过工厂模式,就会发现,其实Spring的底层就有类似于我们写的工厂模式那样的东西。通过Bean工厂反射机制,Spring可以就可以很方便的创建某个类,然后通过依赖注入就可以提供给我们。...可以将IOC容器理解为一个创建Bean的工具Bean的集合容器。...如果你不了解Bean工厂也没有关系,下一讲中,我们将会讲述工厂模式以及Spring中的两个重量级工厂:BeanFactoryApplicationContext。

49530

Spring Bean 名称暗藏玄机,这样取名就不会被代理

TienChin 视频杀青啦~采用 Spring Boot+Vue3 技术栈,里边会涉及到各种好玩的技术,小伙伴们来松哥一起做一个完成率超 90% 的项目,戳戳戳这里-->TienChin 项目配套视频来啦...一些使用小细节就是在不断的源码探索中逐步发现的,今天就来小伙伴们聊一下通过 beanName 的设置,可以让一个 bean 拒绝被代理! 1....当我们按照这样的规则给 bean 取名之后,那么即使当前 bean 已经包含在切点所定义的范围内,这个 bean 也不会被代理了。 这是 Spring5.1 开始的新玩法。 这种写法的原理是什么呢?...,或者这个类上是否有 @Aspect 注解,这个松哥在之前的文章中其实大家介绍过了:听说 Spring Bean 的创建还有一条捷径?。...好啦,一个小小细节,加深大家对 Spring AOP 的理解,感兴趣的小伙伴可以去试试哦~ TienChin 视频杀青啦~采用 Spring Boot+Vue3 技术栈,里边会涉及到各种好玩的技术,小伙伴们来松哥一起做一个完成率超

16120

BeanDefinition元信息:除了Bean名称类名,还有哪些Bean元信息值得关注?

Spring 上一篇文章中已介绍了Bean 的定义,什么是BeanDefinition?...Bean 的自定绑定模式 (比如:byName、byType、constructor等)自动绑定模式、这种方式属性外面引用自动关联配置 ?...Bean 的延迟初始化的模式,默认情况下是非延迟的,就是Bean在容器启动过程中会实时进行初始化,此时相对应的属性或则配置会进行一定的设置;相反延迟化的,是按需进行初始化,这种方式可以有效减少启动时间,...需要的时候对Bean进行初始化 Bean 的初始化 & 销毁,通常都是成对出现 如何构建BeanDefinition?...,可以有父类 BeanDefinitionBuilder#genericBeanDefinition // 根节点获取,只能获取根节点Bean即最顶层Bean BeanDefinitionBuilder

1K20

聊聊Springbean覆盖(存在同名nameid问题),介绍Spring名称生成策略接口BeanNameGenerator【享学Spring

Spring对它的生成有什么规律可循呢?那么接下来就就研究下这个策略:名称生成策略 BeanNameGenerator 为bean定义生成bean名称的策略接口。...', age=18} 得出结论:不同配置文件中存在同名Bean,后解析的配置文件会覆盖先解析的配置文件。...,输出:Person{name='TempConfig----Bean', age=18} 关于@Configuration配置文件的解析,请参考:【小家SpringSpring解析@Configuration...---- 脑洞:BeanDefinition名称SingletonBean同名了咋办? 其实这个问题属于脑洞问题,在真是应用场景中几乎不会发生。...Spring容器既然有这个名称重复问题,我们该如何解决这个问题呢? 靠程序员自律? 制度上要求绝对不能定义重复名称bean

13.6K107

Spring里的容器Bean对象

Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件。这些对象被称为 Spring Beans. 通过阅读配置元数据提供的指令,容器知道对哪些对象进行实例化,配置组装。...Spring IoC 容器利用 Java 的 POJO(plain old Java object) 类配置元数据来生成完全配置可执行的系统或应用程序。...在这里,不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为容器会从 CLASSPATH 中搜索 bean 配置文件。...Bean对象 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的。bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象。...有三种方法把配置元数据提供给 Spring 容器: (1) 基于 XML 的配置文件 (2) 基于注解的配置 (3) 基于 Java 的配置 Bean的作用域 singleton:在spring IoC

87910

Spring的并发问题——有状态Bean无状态Bean

**一、有状态无状态****有状态会话bean** :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束...**Springbean的配置中有四种配置方式,我们只说其中两种:singleton单例模式、prototype原型模式。...singleton表示该bean全局只有一个实例。prototype表示该bean在每次被注入的时候,都要重新创建一个实例,这种情况适用于有状态的Bean。...使用ThreadLocal的例子: 例如,我们有一个银行的BankDAO类一个个人账户的PeopleDAO类,现在需要个人向银行进行转账,在PeopleDAO类中有一个账户减少的方法,BankDAO...解决办法就是在进行转账操作这个线程中,使用ThreadLocal中获取Connection对象,这样,在调用个人账户减少银行账户增加的线程中,就能从ThreadLocal中取到同一个Connection

98571
领券