`
嵇海波
  • 浏览: 13655 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

spring单例bean实现原理

 
阅读更多

Spring 默认实例bean都是单例的  其中单例的实现原理:

定义一个final的ConcurrentHashMap对象,从而该域是线程安全的

privatefinal Map<String, Object> singletonObjectsnew ConcurrentHashMap<String, Object>(64);

其中获取单例的代码放置在同步块中,

protected Object getSingleton(String beanName, boolean allowEarlyReference) {

Object singletonObject = this.singletonObjects.get(beanName);

if (singletonObject == null && isSingletonCurrentlyInCreation(beanName)) {

synchronized (this.singletonObjects) {

singletonObject = this.earlySingletonObjects.get(beanName);

if (singletonObject == null && allowEarlyReference) {

ObjectFactory singletonFactory = this.singletonFactories.get(beanName);

if (singletonFactory != null) {

singletonObject = singletonFactory.getObject();

this.earlySingletonObjects.put(beanName, singletonObject);

this.singletonFactories.remove(beanName);

}

}

}

}

return (singletonObject != NULL_OBJECT ? singletonObject : null);

 

}

 

获取ClassLoader :Thread.currentThread().getContextClassLoader();

分享到:
评论

相关推荐

    springIoc实现原理

    **Spring Ioc 实现原理详解** Spring Ioc(Inversion of Control,控制反转)是Spring框架的核心特性之一,它改变了传统应用程序中对象的创建和管理方式。在传统的软件设计中,对象的创建和依赖关系的维护通常由...

    Spring2.5视频教程_编码剖析Spring管理Bean的原理

    《Spring2.5视频教程:编码剖析Spring管理Bean的原理》是由知名教育机构黑马程序员的讲师黎活明主讲的一套教程,旨在深入解析Spring框架2.5版本中Bean的管理机制。本教程通过实际编码演示,帮助学习者理解Spring如何...

    对Spring中注解怎么实现的一些基本原理

    此外,`@Scope`注解用于设置Bean的作用域,如单例(singleton)或原型(prototype)。 6. **AOP代理**:Spring的面向切面编程(AOP)可以通过注解实现,如`@Aspect`定义一个切面,`@Before`、`@After`、`@Around`等...

    Spring Bean 加载顺序 .

    在Spring框架中,Bean的加载顺序是理解Spring IoC(Inversion of Control,控制反转)容器工作原理的关键部分。这个过程涉及到Bean定义的解析、实例化、初始化等多个步骤。让我们详细探讨Spring Bean加载顺序的各个...

    Spring的bean生命周期

    Bean生命周期的理解对于优化应用性能和理解Spring内部工作原理至关重要。这里我们将深入探讨Spring的Bean生命周期、容器周期以及工厂周期。 首先,让我们从Bean生命周期开始。在Spring中,Bean的生命周期包括以下几...

    Spring源码学习六:bean初始化1

    在Spring框架中,Bean的初始化是其生命周期中的关键步骤,特别是在单例模式下,Spring容器会确保在应用程序启动时创建并初始化所有非延迟加载的单例Bean。在本篇文章中,我们将深入探讨Spring源码中关于Bean初始化的...

    spring ioc和aop原理流程图(详细)

    4. **Bean的作用域**:Spring提供了多种Bean的作用域,如单例(Singleton)、原型(Prototype)、请求(Request)、会话(Session)等,根据不同的需求选择合适的Bean作用域。 5. **Bean的生命周期**:Spring容器对...

    Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等).doc

    Spring 框架系列(8)- Spring IOC 实现原理详解之 Bean 实例化(生命周期、循环依赖等) 本文主要研究 Spring 框架中 Bean 的实例化过程,包括 Bean 的生命周期和循环依赖问题的解决方案。在 Spring 框架中,Bean ...

    spring自动扫描和管理Bean的示例

    总结起来,Spring的自动扫描和管理Bean功能是通过组件扫描和注解驱动配置实现的,这大大减少了手动配置的繁琐工作,提高了开发效率。了解并熟练掌握这些概念对于任何Spring开发者来说都是至关重要的。

    模拟spring工厂模式底层实现。

    7. **单例Bean的缓存**:对于单例模式的Bean,Spring会将其缓存,后续请求相同Bean时,直接返回缓存的实例,避免重复创建。 8. **生命周期管理**:Spring提供了多种生命周期接口,如InitializingBean、...

    Java-spring框架面试题

    在本篇文章中,我们将详细讨论Java-Spring框架中的一些重要知识点,包括单例bean的线程安全性、AOP的应用、事务的实现、事务失效的场景、bean的生命周期、循环依赖等。 单例bean的线程安全性 在Spring框架中,单例...

    Spring框架系列(6) - Spring IOC实现原理详解之IOC体系结构设计.doc

    在实现原理上,Spring通过解析XML或注解配置来构建BeanDefinition对象,然后根据BeanDefinition创建Bean实例。在处理依赖关系时,Spring使用了依赖注入(DI)的概念,它可以是设值注入(setter-based injection)...

    Spring技术内幕:深入解析Spring架构与设计原理

    7. **源码分析**:本书的一大亮点是对Spring源码的深入剖析,帮助读者理解Spring的设计模式和实现技巧,如单例模式、工厂模式、代理模式等。 通过阅读本书,开发者不仅可以提升Spring技能,还能深入理解软件设计...

    手写SpringIoc的XML实现方式

    对于单例bean,我们可以在容器启动时预先实例化;对于原型bean,每次请求时才创建新的实例。 最后,我们需要实现bean的依赖注入。在所有bean实例化之后,遍历bean注册表,检查每个bean的依赖列表,并使用反射进行...

    【框架源码篇 04】Spring源码手写篇-Bean定义配置化

    Spring源码手写篇旨在帮助开发者理解Spring内部的工作原理,通过模仿Spring的核心功能,如Bean工厂和Bean定义,我们可以更好地掌握Spring框架的精髓。04-手写Bean配置-spring-v41.rar可能包含了一个简单的实现,你...

    模拟Spring的IoC容器实现注解自动装配

    - **单例管理**:对于单例bean,需要确保它们只被创建一次并缓存。 最后,通过实际运行一些示例代码,验证我们的模拟IoC容器是否能正确地自动装配bean的依赖,确保功能完备。 以上就是模拟Spring的IoC容器实现注解...

    Spring IOC容器实现分析.pdf 下载

    本文将深入剖析Spring的IOC容器,理解其工作原理和重要功能,以帮助开发者更好地利用这一强大的工具。 一、IOC容器的概念 IOC,即控制反转,是面向对象编程中的一个设计原则,它的主要思想是将对象的创建和管理权...

    beandemo.rar

    7. **Singleton Bean缓存**:对于单例Bean,Spring会将其放入单例缓存中,以便后续请求时能快速提供。如果是原型Bean,每次请求都会创建新的实例。 8. **初始化回调**:如果Bean实现了`InitializingBean`接口,...

    25个经典的Spring面试问答.docx

    默认情况下,Spring的单例bean不是线程安全的。如果多个线程同时访问一个非线程安全的单例bean,可能会导致数据不一致。开发者需要自行处理线程安全问题,或考虑使用原型作用域。 12. 如何在Spring中注入集合类和...

Global site tag (gtag.js) - Google Analytics