首页 > 移动平台 > 详细

spring ApplicationContext中Bean的生命周期

时间:2019-01-15 20:18:28      阅读:161      评论:0      收藏:0      [点我收藏+]

AbstractApplicationContext

Spring的AbstractApplicationContext是ApplicationContext的抽象实现类,该抽象类的refresh方法定义了spring容器在加载配置文件后的各项处理过程

技术分享图片
   public void refresh() throws BeansException, IllegalStateException {
        synchronized (this.startupShutdownMonitor) {
            prepareRefresh();
            // 初始化BeanFactory
            ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
            prepareBeanFactory(beanFactory);
            try {
                postProcessBeanFactory(beanFactory);
                /**
                 *  调用工厂后处理器:
                 *  根据反射机制找出所有实现了BeanFactoryPostProcessor接口的Bean,
                 *  并调用其postProcessBeanFactory()接口方法
                 */
                invokeBeanFactoryPostProcessors(beanFactory);
                /**
                 * 注册Bean后处理器:
                 * 根据反射机制找出所有实现了BeanPostProcessor接口的Bean,
                 * 并注册
                 */
                registerBeanPostProcessors(beanFactory);
                // 初始化消息源:初始化容器的国际化消息资源
                initMessageSource();
                // 初始化Application事件广播器
                initApplicationEventMulticaster();
                // 初始化其他特殊的Bean,由具体子类实现
                onRefresh();
                // 注册事件监听器
                registerListeners();
                // 初始化所有单例的Bean,使用懒加载的除外
                finishBeanFactoryInitialization(beanFactory);
                // Last step: publish corresponding event.
                finishRefresh();
            }
            catch (BeansException ex) {
                if (logger.isWarnEnabled()) {
                    logger.warn("Exception encountered during context initialization - " +
                            "cancelling refresh attempt: " + ex);
                }
                // Destroy already created singletons to avoid dangling resources.
                destroyBeans();
                // 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();
            }
        }
    }
AbstractApplicationContext源码

 

spring ApplicationContext中Bean的生命周期

原文:https://www.cnblogs.com/Mike_Chang/p/10274028.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!