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的创建详解图片,仅供参考
Spring生命周期.vsdx
Spring bean生命周期demo
spring bean 的生命周期,把运行结果的日志,用sublime打开对比查看,你会有比较清晰的认识
弹簧生命周期 一个用于试验 spring 生命周期的小示例应用程序
Springbean生命周期
XXL-JOB学习 xxl-job主流分析,包含调度客户端任务自动注册,服务端内部调度线程调度分析 开源源码赏析,代码分析,spring启动流程分析 Java多线程,线程池启停,设计模式分析
主要介绍了Spring生命周期回调与容器扩展详解,具有一定借鉴价值,需要的朋友可以参考下。
此资源是我的博客bean的生命周期的测试代码,只有源代码,没有相关库文件,环境是spring4.2 ,
SpringBean的生命周期.mdj
主要给大家介绍了Spring中Bean的生命周期和作用域及实现方式的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
本文主要介绍 Spring IoC 容器如何管理 Bean 的生命周期。 在应用开发中,常常需要执行一些特定的初始化工作,这些工作都是相对比较固定的,比如建立数据库连接,打开网络连接等,同时,在结束服务时,也有一些相对...
第二十章:Spring 应用上下文生命周期小马哥 · mercyblitzSpring 应用上下文生命周期Spring 应用上下文启动准备阶段BeanFacto
主要介绍了通过实例解析spring对象生命周期,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
学习Spring过程中,使用Eclipse调试Spring源码的关键断点文件。
Spring管理的Bean的生命周期
主要介绍了Spring bean生命周期配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要给大家介绍了关于Spring与bean有关的生命周期的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Spring具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
这个工程主要实现了: Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)
NULL 博文链接:https://cdxs2.iteye.com/blog/1941613