当前位置:首页 > 开发 > 互联网 > 正文

Spring 生命周期

发表于: 2013-05-10   作者:antlove   来源:转载   浏览次数:
摘要: spring-ApplicationContext启动过程中的初始化流程。 spring 启动过程中主要调用AbstractApplicationContext中的refresh方法 public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdown

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 结束刷新。

  

  

   

 

Spring 生命周期

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
  ApplicationContext启动之后会实例化所有的bean定义,这个特性在本书中已经多次提到。但Applica
Spring Bean 生命周期 任何一个事物都有自己的生命周期,生命的开始、生命中、生命结束。大家最熟悉
概要: IOC容器中Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期
1.当调用者通过getBean(beanName)向容器请求某一个Bean时,如果容器注册了org.springframework.bean
1:实例化: 容器寻找Bean的定义信息并将其实例化。 2:设置属性:使用依赖注入,Spring按照Bean定
Bean在Spring容器中的生命周期 配置在Spring中的Bean在Spring容器中从加载到销毁会经历那些过程呢?
转自:http://sexycoding.iteye.com/blog/1046775 开篇先用一张老图描述下Spring中Bean容器的生命周
开篇先用一张老图描述下Spring中Bean容器的生命周期。 插叙一下,记得某个博文中提到:“Spring的Be
Java对象的生命周期,从初始化到销毁如下: Object obj = new Object(); obj.setXXX(); obj.getXXX();
转自:http://blog.csdn.net/redarmy_chen/article/details/7471476 bean在BeanFactory中的生命周期
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号