`

Spring 生命周期

阅读更多

spring-ApplicationContext启动过程中的初始化流程。

spring 启动过程中主要调用AbstractApplicationContext中的refresh方法

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

			// Tell the subclass to refresh the internal bean factory.
			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;
			}
		}
	}

 1. prepareRefresh() 用于设置spring启动时间并且设置active flag 为true

 2. ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); 刷新beanFactory并返回.

 3. prepareBeanFactory(beanFactory); 为beanFactory注入必要的依赖和配置信息。

 4. postProcessBeanFacotry(beanFactory); 空实现,没有具体代码。(我的spring版本是3.05)

 5.invokeBeanFactoryPostProcessors(beanFactory); 初始化并且调用实现了BeanFactoryPostProcessor接口的类。(诸如PropertyPlaceholderConfigurer)

 6.registerBeanPostProcessors(beanFactory);注册实现了BeanPostProcessor的类。(下面将会用到)

 7.

      initMessageSource(); 

      initApplicationEventMulticaster();

      onRefresh();
      registerListeners();

初始化spring容器中的信息。

 8.finishBeanFactoryInitialization(beanFactory);

   遍历spring配置文件中配置的bean.

   1)  找到第一个配置的bean,进行调用默认构造函数进行初始化。   

   2)对该bean设置属性。(配置文件中配置的property属性)

   3)  

        如果该bean实现了BeanNameAware接口,则调用bean的setBeanName方法。

        如果该bean实现了BeanClassLoaderAware接口,则调用bean的setBeanClassLoader方法。

        如果该bean实现了BeanFactoryAware接口,则调用bean的setBeanFactory方法。

   4) 遍历spring配置文件中实现BeanPostProcessor接口的类(),然后调用每一个BeanPostProcessor实现类    的postProcessBeforeInitialization方法。值得一提的是ApplicationContextAwareProcessor也实现了BeanPostProcessor,并且如果你初始化容器是AbstractApplicationContext的子类则会默认载入ApplicationContextAwareProcessor。

   5)如果该bean实现了InitializingBean,则会调用afterPropertiesSet方法。

   6)若果该bean在配置文件中设置了init-method属性,则会调用该属性指定的方法。

   7) 遍历spring配置文件中实现BeanPostProcessor接口的类(),然后调用每一个BeanPostProcessor实现类    的postProcessAfterInitialization方法。

   8) 继续第二个bean ...

  

 9.finishRefresh 结束刷新。

  

  

   

 

分享到:
评论
2 楼 dxqrr 2015-02-27  
good..........
1 楼 lijiejava 2013-05-10  
好!!!

相关推荐

    Spring生命周期.png

    spring的创建详解图片,仅供参考

    Spring生命周期.vsdx

    Spring生命周期.vsdx

    Spring bean生命周期demo

    在Spring框架中,Bean的生命周期是指从创建到销毁的整个过程。这个过程包含了初始化、正常使用以及最终的销毁几个阶段。了解并掌握Spring Bean的生命周期对于优化应用性能和资源管理至关重要。接下来,我们将深入...

    spring bean的生命周期

    Spring Bean的生命周期是Spring框架中的核心概念,它涵盖了Bean从创建到销毁的全过程。了解这一过程对于优化应用程序的性能和管理资源至关重要。在Spring中,Bean的生命周期主要分为以下几个阶段: 1. **初始化阶段...

    第二十章 Spring 应用上下文生命周期(ApplicationContext Lifecycle)1

    这一节可能包含了对Spring生命周期相关面试题的解析,帮助读者更好地理解和准备面试。 15. **结束语** 总结全文,强调Spring应用上下文生命周期的重要性以及理解其工作原理对于开发和维护Spring应用的意义。 ...

    spring-lifecycle:一个用于试验 spring 生命周期的小示例应用程序

    标题中的"spring-lifecycle"暗示了这个项目专注于探索Spring框架中bean的生命周期管理。让我们深入了解一下Spring框架的生命周期及其相关的知识点。 在Spring中,bean的生命周期是指从创建到销毁的整个过程,它包括...

    spring bean的生命周期测试代码

    在Spring框架中,Bean的生命周期管理是其核心特性之一,它允许开发者控制Bean从创建到销毁的整个过程。本资源提供了在Spring 4.2环境下关于Bean生命周期的测试代码,帮助我们深入理解这一关键概念。 首先,让我们...

    Spring Bean生命周期.pdf

    其中,Spring Bean生命周期的管理是Spring框架的核心功能之一,它涉及Spring容器如何创建、配置以及销毁Bean的整个过程。理解Spring Bean的生命周期对于开发高效和可维护的Java应用至关重要。 Spring Bean生命周期...

    详解Spring中Bean的生命周期和作用域及实现方式

    Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...

    spring bean life cycle

    在Spring框架中,Bean生命周期是核心概念之一,它涉及到Bean的创建、初始化、使用和销毁等阶段。了解和掌握Bean生命周期对于开发高质量的Spring应用至关重要。以下是对Spring Bean生命周期的详细解析。 首先,Bean...

    spring中service生命周期(xml/annotation)

    本文将探讨Spring中Service的生命周期,以及如何通过XML配置和注解来管理这些组件。 首先,Spring Service的生命周期通常包括实例化、初始化、正常运行、销毁四个阶段。在XML配置中,我们可以通过`<bean>`标签来...

    SpringBean的生命周期.mdj

    SpringBean的生命周期.mdj

    谈谈我对Spring Bean 生命周期的理解

    本文将详细介绍 Spring Bean 生命周期的概念、生命周期图、生命周期阶段、生命周期管理方式等相关知识点。 一、 Spring Bean 生命周期概述 Spring Bean 生命周期是指 Spring 容器中 Bean 的创建、初始化、销毁等...

    spring_in_action-sixth-edition.pdf

    Spring 生命周期是指 Spring 应用程序从启动到关闭的整个过程。Spring 生命周期包括应用程序的初始化、启动、运行和关闭等阶段。 11. Spring 配置 Spring 配置是指使用 Spring 框架的配置机制,帮助开发者快速构建...

    spring-hook-test.rar

    5. **Spring生命周期回调**:除了上述的`@PostConstruct`和`@PreDestroy`,Spring还提供了一些其他的生命周期回调,如`SmartLifecycle`接口,允许在应用启动和停止时控制Bean的启动和停止顺序。`@Application...

    Spring Bean 的生命周期

    本文主要介绍 Spring IoC 容器如何管理 Bean 的生命周期。 在应用开发中,常常需要执行一些特定的初始化工作,这些工作都是相对比较固定的,比如建立数据库连接,打开网络连接等,同时,在结束服务时,也有一些相对...

    架构师面试题系列之Spring面试专题及答案(41题).docx

    Spring 框架生命周期和 Bean 实例化过程 Spring 框架是一个非常流行的 Java Web 应用程序框架,它提供了一种灵活的方式来管理应用程序的生命周期。了解 Spring 的生命周期对于架构师和开发人员来说是非常重要的。 ...

Global site tag (gtag.js) - Google Analytics