`

AbstractApplicationContext 之 refresh

 
阅读更多

refresh 是初始化spring 容器的入口

public void refresh() throws BeansException, IllegalStateException {
        synchronized (this.startupShutdownMonitor) {
            // Prepare this context for refreshing.
            prepareRefresh();

            // 创建beanFactory  并且完成BeanDefinition 的解析
            ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

            // Prepare the bean factory for use in this context.
            prepareBeanFactory(beanFactory);

            try {
                // Allows post-processing of the bean factory in context subclasses.
                postProcessBeanFactory(beanFactory);

                // Invoke factory processors registered as beans in the context.
                invokeBeanFactoryPostProcessors(beanFactory);

                // Register bean processors that intercept bean creation.
                registerBeanPostProcessors(beanFactory);

                // Initialize message source for this context.
                initMessageSource();

                // Initialize event multicaster for this context.
                initApplicationEventMulticaster();

                // Initialize other special beans in specific context subclasses.
                onRefresh();

                // Check for listener beans and register them.
                registerListeners();

                // Instantiate all remaining (non-lazy-init) singletons.
                finishBeanFactoryInitialization(beanFactory);

                // Last step: publish corresponding event.
                finishRefresh();
            }

            catch (BeansException ex) {
                // Destroy already created singletons to avoid dangling resources.
                destroyBeans();

                // Reset 'active' flag.
                cancelRefresh(ex);

                // Propagate exception to caller.
                throw ex;
            }
        }
    }

分享到:
评论

相关推荐

    Spring源码refresh方法调试笔记

    ### Spring源码refresh方法调试笔记 #### 一、概述 `refresh` 方法是Spring框架中的一个核心方法,它主要用于初始化整个应用上下文(ApplicationContext),包括加载配置文件、创建Bean实例等重要步骤。本文将深入...

    解决SpringDataJPA报错:org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null w

    问题描述 用SpringBoot + Spring Data JPA操作数据库 项目启动的时候 报了一个错 SpringBoot的版本是2.2.6.RELEASE org.springframework.beans.factory.BeanCreationException: Error creating bean with name '...

    Spring启动流程.java

    AbstractApplicationContext.refresh(){ 1.为刷新准备此上下文 prepareRefresh(){ initPropertySources();//在上下文环境中初始化任何占位符属性源 getEnvironment().validateRequiredProperties();//验证所有...

    Spring的refresh()方法相关异常解析

    refresh() 方法是定义在 AbstractApplicationContext 类中的,它的主要作用是刷新 ApplicationContext 对象,准备它用于 bean 的实例化和依赖注入。下面是 refresh() 方法的源代码: ```java public void refresh()...

    详解Spring IOC 容器启动流程分析

    Spring IOC 容器的启动流程是整个 Spring 框架的核心所在,本文将从 AbstractApplicationContext 的 refresh 方法开始,详细分析 Spring IOC 容器的启动流程。 在 Spring 框架中,ApplicationContext 是 IOC 容器的...

    testSpring

    2013-3-20 22:22:46 org.springframework.context.support.AbstractApplicationContext refresh 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@c1f10e: display name [org....

    Spring IoC加载流程讲解

    然后,我们调用父类 AbstractApplicationContext 的 refresh() 方法,该方法采用模板方法的设计模式将加载 IoC 容器的流程列于其中。具体调用到的方法由其子类进行覆盖。 3. 加载 BeanFactory 在 ...

    Spring源码分析

    - 在 **AbstractApplicationContext** 中,**refresh** 方法首先调用 **obtainFreshBeanFactory** 和 **refreshBeanFactory** 方法来创建一个新的BeanFactory实例。 - **AbstractRefreshableApplicationContext** 的...

    18 Spring IoC容器如何读取应用外部的xml,txt,图形或者属性文件?慕课专栏(1)1

    3. `AbstractApplicationContext.refresh`刷新容器,加载并解析配置文件。 4. `AbstractRefreshableApplicationContext.refreshBeanFactory`刷新Bean工厂。 5. `AbstractXmlApplicationContext.loadBeanDefinitions`...

    Spring高级之注解驱动开发视频教程

    n 源码分析-AbstractApplicationContext的refresh方法 n 源码分析-AbstractBeanFactory的doGetBean方法 l Spring Aop n 设计模式-代理模式 n 编程思想-AOP思想 n 基础应用-入门案例 n 基础应用-常用注解 n 高级应用-...

    java知识1点的总结

    `refresh()`方法是AbstractApplicationContext的核心功能之一,它的主要任务是刷新IoC容器,确保每次启动或重新启动时都能得到一个新的、完整的容器实例。当调用`refresh()`时,会执行一系列的步骤来初始化和配置...

    Spring完美教程

    Spring框架是Java开发中最常用的企业级应用框架之一,它提供了一种轻量级的容器管理方式,使得开发者可以更轻松地进行依赖注入(Dependency Injection, DI)和面向切面编程(Aspect Oriented Programming, AOP)。...

    struts2驱动包

    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381) at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext....

    spring完美教程

    - `AbstractApplicationContext`是ApplicationContext接口的主要实现,它负责管理bean的生命周期,以及处理事件和消息源。 - `AbstractRefreshableApplicationContext`进一步扩展了`AbstractApplicationContext`,...

    Spring Boot启动过程完全解析(二)

    此方法在检查`context`是否为`AbstractApplicationContext`的实例后,将其转换为`AbstractApplicationContext`并调用`refresh`方法。`AbstractApplicationContext`的`refresh`方法是一个同步代码块,确保在多线程...

    Spring Aop 源码流程.doc

    `refresh()`方法位于`AbstractApplicationContext`类中,它负责加载和刷新配置,以及初始化Bean工厂。在这个过程中,`refresh()`会调用`invokeBeanFactoryPostProcessors(beanFactory)`,目的是处理所有的`...

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

    自定义版本可以扩展Spring提供的`AbstractApplicationContext`,并覆盖其关键方法,如`refresh()`和`close()`,以适应特定的需求。 1. **初始化配置**: - 在`refresh()`方法中,我们需要加载XML配置文件。这可以...

    spring容器的触发事件 ClassPathXmlApplicationContext的start()方法的用法

    其中,依赖注入是 Spring 最为核心的功能之一,它通过 IoC 容器来管理对象的生命周期和依赖关系。Spring 支持多种类型的 IoC 容器,包括 `BeanFactory` 和 `ApplicationContext`。 #### 二、...

    spring第三天.pdf

    课程还会涵盖Spring容器的初始化流程,包括`AbstractApplicationContext`的`refresh()`方法,这是Spring应用上下文启动的关键。在web环境中,通常由`ContextLoaderListener`监听器来触发这个过程。 总的来说,本...

Global site tag (gtag.js) - Google Analytics