`

Spring IOC 源码-ClassPathXmlApplicationContext-bean解析

阅读更多
1、使用方式-使用ApplicationContext方式加载XML
@Test
    public void testBeanLoader(){
        BeanFactory bf = new ClassPathXmlApplicationContext("configuration/spring-test.xml");
}
2、解析ClassPathXmlApplicationContext构造函数:
public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)
            throws BeansException {
 
        super(parent);
        setConfigLocations(configLocations);//设置配置文件信息
        if (refresh) {
            refresh();//主要的加载bean的过程
        }
    }
3、refresh方法:
@Override
    public void refresh() throws BeansException, IllegalStateException {
        synchronized (this.startupShutdownMonitor) {
            // 准备刷新上下文环境
            prepareRefresh();
 
            // 初始化beanFactory并进行xml文件的读取
            ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
 
            //对beanfactory进行功能填充
            prepareBeanFactory(beanFactory);
 
            try {
                // Allows post-processing of the bean factory in context subclasses.
                postProcessBeanFactory(beanFactory); //允许beanfactory在上下环境中对子类的后处理
 
                // Invoke factory processors registered as beans in the context.
                invokeBeanFactoryPostProcessors(beanFactory); //激活beanfactory
 
                // Register bean processors that intercept bean creation.
                registerBeanPostProcessors(beanFactory); //注册bean后处理,此时注册的并不是真正的bean,真正的bean是通过getBean得到的
 
                // Initialize message source for this context.
                initMessageSource(); //为上下文初始化message源
 
                // Initialize event multicaster for this context.
                initApplicationEventMulticaster(); //初始化应用消息广播器并注册到ApplicationEventMulticaster中
 
                // Initialize other special beans in specific context subclasses.
                onRefresh(); //初始化其他上下文中子类中的特殊bean
 
                // Check for listener beans and register them.
                registerListeners(); //查找lestenerbean,并注册到消息广播器中
 
                // Instantiate all remaining (non-lazy-init) singletons.
                finishBeanFactoryInitialization(beanFactory); //初始化单例
 
                // Last step: publish corresponding event.
                finishRefresh(); //初始化完成
            }
 
            catch (BeansException ex) {
                logger.warn("Exception encountered during context initialization - cancelling refresh attempt", ex);
 
                // Destroy already created singletons to avoid dangling resources.
                destroyBeans(); //异常时销毁bean
 
                // Reset 'active' flag.
                cancelRefresh(ex);
 
                // Propagate exception to caller.
                throw ex;
            }
 
            finally {
                // Reset common introspection caches in Spring's core, since we
                // might not ever need metadata for singleton beans anymore...
                resetCommonCaches();
            }
        }
    }
分享到:
评论

相关推荐

    Spring IoC源码深度剖析开源架构源码2021.pdf

    标题《Spring IoC源码深度剖析开源架构源码2021.pdf》和描述《Spring IoC源码深度剖析开源架构源码2021.pdf》表明该文档主要面向于分析Spring框架中控制反转(IoC)容器的核心源码,解析和理解其内部的工作机制及...

    Spring IOC源码解读

    Spring IOC,即Inversion of Control(控制反转),是Spring框架的核心特性之一,它负责管理和装配应用程序中的对象。...理解并掌握Spring的IOC源码,对于深入学习Spring框架以及提升系统设计能力具有重要意义。

    spring ioc

    在提供的 "src" 压缩包文件中,如果包含的是 Spring 框架的源码,那么我们可以详细研究每个类和方法,了解 Spring 如何处理 Bean 的生命周期、解析配置、创建依赖关系等。这将帮助我们成为 Spring 框架的专家,更...

    Spring IoC源码分析1

    理解Spring IoC容器的工作原理和bean的装配方式对于开发高效、可维护的Spring应用至关重要。通过XML配置或者注解方式,我们可以轻松地控制bean的创建、装配和管理,以及定制bean的行为。而`FactoryBean`和`...

    官方原版源码spring-framework-5.0.13.RELEASE.zip

    1. **初始化流程**:从`org.springframework.context.support.ClassPathXmlApplicationContext`或`org.springframework.web.context.ContextLoader`开始,理解如何加载配置并创建Bean定义。 2. **依赖注入**:研究`...

    SpringIOC源码.rar

    1、 需要去构造一个Spring容器:ClassPathXmlApplicationContext; 2、 需要注解定义两个注解:@Service、@Resource; 3、 使用反射的手段读取指定目录下的class信息,解析Class信息; 4、 对Class信息的注解做处理...

    【框架源码篇 01】Spring源码-手写IOC

    在本系列的第一篇中,我们将深入探讨Spring框架的核心特性——依赖注入(Dependency Injection,简称DI),并通过手动实现一个简易的IOC容器来理解其工作原理。Spring框架是Java开发中的基石,它提供了许多功能,如...

    Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程.doc

    通过设置资源解析器和环境、设置配置路径、初始化 BeanFactory、加载 Bean 定义资源、解析 Bean 定义资源和注册 BeanDefinition,这些步骤组成了 IOC 初始化流程。 在 Spring 框架中,IOC 容器是核心组件,负责管理...

    spring-framework-4.2.5 所有jar包

    - `spring-core-4.2.5.RELEASE.jar`:包含了Spring的基础工具类和基本的IoC容器,如ClassPathXmlApplicationContext和BeanFactory。 - `spring-beans-4.2.5.RELEASE.jar`:处理bean的创建、配置和管理,支持XML和...

    Spring IOC 笔记

    **Spring IOC 笔记** Spring 框架是 Java 应用开发中的核心框架,它引入了控制反转(Inversion of Control,简称 IOC)和依赖注入(Dependency Injection,简称 DI)的概念,极大地简化了组件之间的依赖关系管理。...

    spring-framework-4.2.3.RELEASE 源码

    《Spring Framework 4.2.3.RELEASE 源码深度解析》 Spring Framework作为Java领域最广泛应用的轻量级框架之一,其4.2.3.RELEASE版本是该框架发展历史上的一个重要里程碑。深入理解Spring Framework的源码,不仅能够...

    spring-frameword4.0源码

    通过阅读`DefaultListableBeanFactory`和`ClassPathXmlApplicationContext`的实现,可以理解Spring如何加载和解析bean定义。 关于AOP,`AspectJ`是Spring实现AOP的主要方式,通过`@Aspect`注解定义切面,`@Before`...

    Spring 源码分析(Bean的初始化)

    `BeanDefinition`是Spring IOC容器中Bean定义的抽象表示,它包含了Bean的所有配置信息。 一旦所有的Bean定义都被解析并注册到BeanDefinitionRegistry(通常是一个`DefaultListableBeanFactory`实例),Spring会开始...

    spring源码(注释+测试版)

    Spring框架是Java开发中最广泛应用的轻量级框架之一,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,提供了全面的解决方案,包括数据访问、事务管理、Web...

    spring源码

    - **spring-core**:Spring 的核心工具包,提供了 IoC 容器的基础,如 Resource 接口和 ClassPathXmlApplicationContext 类。 - **spring-web** 和 **spring-webmvc**:分别对应了 Web 应用的支持和 MVC 框架的实现...

    otherspringdatasource:spring原始解析-源码解析

    在Spring初始化这个Bean时,`ClassPathXmlApplicationContext`或者`FileSystemXmlApplicationContext`会解析XML配置,创建Bean定义,并调用`BeanFactoryPostProcessor`进行预处理。然后,`...

    spring的基础(一)自己写的ClassPathXmlApplicationContext类

    `ClassPathXmlApplicationContext`是Spring框架中用于加载和管理配置元数据的核心类,它允许我们通过XML文件来定义和初始化Bean。在Java应用中,Spring作为一个依赖注入(DI)和面向切面编程(AOP)的框架,极大地...

    spring 源码解析

    Spring 源码解析系列将深入探讨 Spring 框架的核心机制,特别是 IOC(Inversion of Control,控制反转)和 AOP(Aspect Oriented Programming,面向切面编程)的实现。本文首先关注的是 Spring 中的 IOC 容器,它是...

    简单Spring容器实现

    了解并实现Spring容器不仅能帮助我们更好地理解和使用Spring框架,还能为自定义IoC容器或扩展现有项目提供基础。通过阅读和实践`MySpring`中的代码,我们可以更深入地学习Spring的内部工作原理,提升我们的编程技能...

Global site tag (gtag.js) - Google Analytics