Spring 源码总结

refresh()

1. prepareRefresh()

刷新预处理

  1. 设置容器状态为 active
  2. 初始化属性配置,空方法,可以重写这个方法来自定义属性
  3. 属性配置校验,也是空的
  4. 缓存容器中早期事件监听器

2. obtainFreshBeanFactory()

获取 BeanFactory

  1. 创建 DefaultListableBeanFactory,并设置 serializationId
  2. 返回上一步创建的 BeanFactory,此时只有一些默认的配置

3. prepareBeanFactory(beanFactory)

BeanFactory 预准备

  1. 设置 BeanFactory 的类加载器、表达式解析器等
  2. 添加 BeanPostProcessor
  3. 忽略指定的自动装配依赖接口
  4. 注册能够自动装配的组件、默认的环境配置等

4. postProcessBeanFactory(beanFactory);

可以重写这个方法来在 BeanFactory 准备完成后执行一些操作

5. invokeBeanFactoryPostProcessors(beanFactory);

执行 BeanDefinitionRegistryPostProcessor、BeanFactoryPostProcessor。Spring 后置处理器源码

6. registerBeanPostProcessors(beanFactory);

执行 BeanPostProcessor。Spring 后置处理器源码

7. initMessageSource();

初始化 MessageSource,用于国际化配置等

  1. 从容器获取 MessageSource 组件
  2. 如果容器中不存在,则默认设置为 DelegatingMessageSource

8. initApplicationEventMulticaster();

初始化事件派发器。Spring事件监听器源码

9. onRefresh();

可以重写这个方法来在容器刷新时执行一些操作

10. registerListeners();

添加 ApplicationListener 监听器。Spring事件监听器源码

11. finishBeanFactoryInitialization(beanFactory);

  1. 初始化剩余的非懒加载单例 Bean。Spring 后置处理器源码
  2. 添加 @EventListener 监听器。Spring事件监听器源码

12. finishRefresh();

刷新完成,给监听器发布事件。Spring事件监听器源码

posted @ 2019-08-12 00:15  O'Neal  阅读(412)  评论(0编辑  收藏  举报