`
flyingsword945
  • 浏览: 24276 次
  • 性别: Icon_minigender_2
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

Spring 源码学习--XmlBeanDefinitionReader

 
阅读更多

private final ThreadLocal<Set<EncodedResource>> resourcesCurrentlyBeingLoaded =
            new NamedThreadLocal<Set<EncodedResource>>("XML bean definition resources currently being loaded");

在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量。这时该变量是多个线程共享的,使用同步机制要求程序慎密地分析什么时候对变量进行读写,什么时候需要锁定某个对象,什么时候释放对象锁等繁杂的问题,程序设计和编写难度相对较大。
而ThreadLocal则从另一个角度来解决多线程的并发访问。ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。

 

概括起来说,对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。

 

Assert.notNull(encodedResource, "EncodedResource must not be null");

currentResources = new HashSet<EncodedResource>(4);

if (!currentResources.add(encodedResource)) {
            throw new BeanDefinitionStoreException(
                    "Detected cyclic loading of " + encodedResource + " - check your import definitions!");
        }

 

 finally {
            currentResources.remove(encodedResource);
            if (currentResources.isEmpty()) {
                this.resourcesCurrentlyBeingLoaded.remove();
            }
        }

分享到:
评论

相关推荐

    Spring源码总结.pdf

    在Spring源码中,容器的加载方式、XML属性配置的解析过程以及自定义标签的处理是核心知识点。 1. **Spring容器加载方式**: - **ClassPathXmlApplicationContext**: 通过类路径加载XML配置文件,适用于传统的Java...

    spring-beans源码

    通过对`spring-beans`源码的深入学习,我们可以更好地理解Spring的工作机制,从而更高效地利用这一强大框架。这有助于我们编写出更加灵活、可维护的代码,提升项目的整体质量。在实际开发中,理解并掌握这些知识点将...

    spring-framework-3.2.5源代码

    通过对Spring Framework 3.2.5源代码的阅读和学习,开发者不仅能深入了解Spring的内部工作原理,还能提升自己的设计思想,更好地应用到实际项目中,提高代码质量和可维护性。在不断发展的软件工程领域,理解和掌握...

    Spring源码学习五:BeanDefinition装载1

    Spring 源码学习五:BeanDefinition 装载 1 在 Spring 框架中,BeanDefinition 是一个核心概念,它描述了一个 Bean 的定义,包括其依赖项、作用域、生命周期等信息。在本篇文章中,我们将深入探讨 Spring 的源码,...

    Spring源码分析

    以下是对Spring源码分析中所涉及的关键知识点的详细说明。 首先,IoC容器在Spring框架中的重要性不言而喻。它是一种实现控制反转的设计模式,用来减少代码间的耦合度,提升系统的可测试性和可维护性。IoC容器能够...

    spring 源码解析

    Spring 源码解析系列将深入探讨 Spring 框架的...总的来说,理解 Spring 的源码对于深入学习和优化应用性能至关重要。通过阅读和分析源码,开发者可以更好地掌握 Spring 的设计原则,从而更高效地利用这个强大的框架。

    java SOURSE

    3. Spring源码学习: - Bean生命周期:了解Spring如何创建、初始化、装配、销毁Bean,以及AOP代理的实现原理。 - 事件驱动:Spring的ApplicationEvent和ApplicationContextEventListener机制,用于在应用上下文间...

    Spring源代码自我解析

    通过学习和研究Spring源码,不仅可以快速提升个人的Java技术水平,还能深刻理解高级设计模式的应用以及如何构建高质量的软件系统。 #### 二、Spring的IoC容器解析 IoC(Inversion of Control)即控制反转,是...

    spring 个人小结 源码分析机制原理

    Spring框架是Java开发中不可或缺的一...理解这些核心机制对于深入学习Spring框架以及优化代码的可维护性和灵活性至关重要。通过源码分析,我们可以更深入地了解Spring的工作原理,从而更好地应用和扩展这一强大的框架。

    这一次搞懂Spring的XML解析原理说明

    在深入探讨Spring的XML解析原理之前,让我们先理解Spring框架的核心概念:控制反转(Inversion of Control...总的来说,理解Spring的XML解析原理有助于我们更好地利用Spring框架,同时也为深入学习Spring源码打下基础。

    spring第三天.pdf

    在本课程中,我们将深入探讨Spring框架的核心特性,包括IoC容器、AOP(面向切面编程)以及动态...通过学习,学员不仅可以提升技术水平,还能够具备解决实际问题的能力,为开发更高效、更稳定的Spring应用打下坚实基础。

Global site tag (gtag.js) - Google Analytics