`
阅读更多
通过DefaultListableBeanFactory 这个类可以了解到:
1 spring 使用 ConcurrentHashMap 来存储bean 。
2 两个不同的配置文件中,重名的bean, 后者会覆盖前者 。

代码段:

synchronized (this.beanDefinitionMap) {
Object oldBeanDefinition = this.beanDefinitionMap.get(beanName);
if (oldBeanDefinition != null) {
if (!this.allowBeanDefinitionOverriding) {
throw new BeanDefinitionStoreException(beanDefinition.getResourceDescription(), beanName,
"Cannot register bean definition [" + beanDefinition + "] for bean '" + beanName +
"': There is already [" + oldBeanDefinition + "] bound.");
}
else {
if (this.logger.isInfoEnabled()) {
this.logger.info("Overriding bean definition for bean '" + beanName +
"': replacing [" + oldBeanDefinition + "] with [" + beanDefinition + "]");
}
}
}
else {
this.beanDefinitionNames.add(beanName);
this.frozenBeanDefinitionNames = null;
}
this.beanDefinitionMap.put(beanName, beanDefinition);

resetBeanDefinition(beanName);
}
分享到:
评论

相关推荐

    Spring bean 动态注册,jar包热替换

    Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class...测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录中的jar实现类。

    Spring Boot: Bean definition overriding

    在本文中,我将讨论棘手的Spring Boot bean定义覆盖机制。 为了使您对该主题更加清楚,让我们从小测验开始。请看下一个简单的例子。 因此,我们有2种配置,它们使用名称beanName实例化bean,在主应用程序中,我们仅...

    Spring的bean生命周期

    在Spring中,你可以定义自己的BeanFactory实现,覆盖默认的Bean创建逻辑。虽然在大多数情况下,使用默认的DefaultListableBeanFactory已经足够,但自定义工厂可以提供更大的灵活性,比如在Bean实例化时进行特殊处理...

    Quartz注入Spring的Bean

    3. **Spring注入Bean到Job**:在Job执行时,我们可以直接注入其他由Spring管理的Bean,无需在Job中创建这些对象,从而减少了代码的复杂性,增强了可重用性。 4. **JobFactory的自定义**:Quartz默认使用...

    spring的Bean配置说明

    在Spring框架中,配置Bean是核心功能之一,它允许开发者声明、管理和注入应用程序中的对象。Spring使用XML配置文件来描述这些Bean及其依赖关系。以下是对Spring Bean配置的详细解释: 1. `<beans>` 根元素:这是...

    spring 5.2.9 07 源码分析-spring的bean工厂准备工作 测试用例

    在这个阶段,Spring会进行Bean定义的合并和覆盖,处理`@Profile`注解以确定哪些Bean在特定环境下被激活。 接下来,我们讨论`setText()`标签,它在Spring中主要用于设置Bean属性值。在XML配置中,我们可以使用`...

    spring-override:命名空间处理程序,允许在模块化环境中覆盖,扩展或修改Spring Bean

    该库提供了XML名称空间处理程序,该处理程序允许在模块化环境中覆盖,扩展或修改bean。 该代码最初由和于2007年编写,是。 因此,所有功劳归功于他们。 由于Pivotal了Spring DM项目,所以我认为riot的实用覆盖功能...

    spring入门教程之bean的继承与自动装配详解

    在Spring框架中,Bean是核心概念之一,它们代表了应用程序中的对象,负责执行特定的功能。Spring作为一个依赖注入(DI)和面向切面编程(AOP)的容器,它管理Bean的生命周期并处理Bean之间的依赖关系。本文将深入...

    Quartz(二)整合Spring容器中bean及动态调度任务

    在"Quartz(二)整合Spring容器中bean及动态调度任务"这个主题中,我们将探讨如何在Spring容器中配置和使用Quartz,以及如何动态地调度任务。首先,我们需要在Spring的配置文件中声明Quartz的相关bean,如`...

    Spring中眼花缭乱的BeanDefinition.docx

    Spring中的BeanDefinition是核心概念,它是Spring IOC容器的基础,用于描述Bean的元数据,包括Bean的行为、依赖关系和其他配置信息。BeanDefinition包含了Bean的全限定类名、作用域、生命周期回调方法、依赖的其他...

    Spring In Action 继承Bean的配置

    在Spring框架中,Bean的继承配置是一个非常关键的概念,它允许我们通过定义一个基础Bean配置,然后由其他Bean继承这个配置,实现配置的复用和扩展。这种方式在大型项目中非常常见,因为它使得代码更加模块化,易于...

    spring中bean id相同引发故障的分析与解决

    在Spring框架中,每个Bean都有一个唯一的标识符,通常是通过`id`属性来定义的。当我们在配置文件或使用注解定义多个Bean时,如果它们的`id`相同,就会出现冲突,导致Spring容器无法正常初始化,从而引发故障。本文将...

    SPRING中文开发参考手册

    - **自动装配协作对象**:Spring 支持自动装配协作对象到 Bean 中。 - **依赖检查**:Spring 可以帮助开发者检查 Bean 是否正确地装配了所需的依赖。 ##### 3.3 自定义 Bean 的本质特征 - **生命周期接口**:Bean ...

    Spring 容器后处理器

    在这个示例中,`test-overrides.properties`文件中的属性将会覆盖`application.properties`中的同名属性。 #### 五、总结 容器后处理器在Spring框架中扮演着重要的角色,它们不仅可以帮助开发者更加灵活地管理配置...

    Spring源码学习四:BeanDefinition装载前奏曲1

    在深入Spring源码的学习过程中,我们主要关注BeanDefinition的装载过程。BeanDefinition是Spring框架的核心概念,它包含了关于Bean的所有元数据,如类名、属性、依赖关系等。在Spring初始化时,会读取XML配置文件,...

    Spring 中文教程

    例如,在"Spring 2.0 中文用户指南"中,你可以学习如何在XML中声明bean及其属性。 三、面向切面编程 1. AOP概念:AOP允许我们把关注点分离,将业务逻辑和横切关注点(如日志、事务管理等)解耦。Spring支持基于注解...

    Spring5中文文档

    在表达式语言(SpEL)章节中,介绍了Spring表达式语言的基础知识和功能特性,以及如何在Bean定义中使用SpEL表达式进行求值和语言参考。 测试章节提供了单元测试和集成测试的示例和最佳实践,包括JDBC测试和使用...

    Spring中文 开发手册+aop讲解.zip

    这份手册可能覆盖了Spring框架的整体架构,从基础到高级特性,如Spring Boot、Spring Cloud、Spring Security等。Spring 中文开发手册.pdf可能是为初学者和进阶者提供的全面指南。 4. **Spring AOP.pdf**: 这...

    Spring全家桶知识笔记.pdf

    Spring中BeanFactory顶层接口提供了通过容器获取特定名称bean的方法,而ListableBeanFactory接口定义了访问容器中bean基本信息的方法。HierarchicalBeanFactory允许父子级联,这意味着可以创建父子层级关联的容器...

Global site tag (gtag.js) - Google Analytics