01. Spring Framework 启动流程
2022-02-26 09:49:20 0 举报
AI智能生成
Spring 容器启动流程
作者其他创作
大纲/内容
this()
通过 this() 调用无参构造方法
通过 this() 调用无参构造方法
GenericApplicationContext#<init>
先调用父类的构造方法初始化 beanFactory,实例类型是 DefaultListableBeanFactory
先调用父类的构造方法初始化 beanFactory,实例类型是 DefaultListableBeanFactory
this.reader = new AnnotatedBeanDefinitionReader(this)
初始化 reader
初始化 reader
getOrCreateEnvironment(registry)
创建 StandardEnvironment
创建 StandardEnvironment
AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry)
向 beanDefinitionMap 属性添加一些初始化组件
向 beanDefinitionMap 属性添加一些初始化组件
this.scanner = new ClassPathBeanDefinitionScanner(this)
初始化 scanner,配置扫描策略
初始化 scanner,配置扫描策略
register(annotatedClasses)
注册传入的配置类,这里允许传入多个
注册传入的配置类,这里允许传入多个
doRegisterBean()
向 beanDefinitionMap 属性添加配置类 [SpringConfig]
refresh()
Spring 容器刷新流程
Spring 容器刷新流程
prepareRefresh()
刷新前的预处理,如记录启动时间
obtainFreshBeanFactory()
获取 beanFactory,在前面的步骤中已经初始化
获取 beanFactory,在前面的步骤中已经初始化
prepareBeanFactory(beanFactory)
预处理 beanFactory,向容器中添加一些组件
postProcessBeanFactory(beanFactory)
子类通过重写这个方法可以在 BeanFactory 创建并与准备完成以后做进一步的设置
Spring 容器无实现,但 Spring web 容器有实现
子类通过重写这个方法可以在 BeanFactory 创建并与准备完成以后做进一步的设置
Spring 容器无实现,但 Spring web 容器有实现
invokeBeanFactoryPostProcessors(beanFactory)
执行 BeanFactoryPostProcessor 处理器
执行 BeanFactoryPostProcessor 处理器
getBeanFactoryPostProcessors()
获取用户自定义的 BeanFactoryPostProcessor
获取用户自定义的 BeanFactoryPostProcessor
invokeBeanFactoryPostProcessors()
执行 BeanFactory 后置处理器
registerBeanPostProcessors(beanFactory)
向容器中注册 bean 后置处理器
initMessageSource()
初始化 MessageSource 组件:国际化、消息绑定与解析
initApplicationEventMulticaster()
初始化事件派发器,在注册监听器时会用到
onRefresh()
留给子容器,子类重写这个方法,在容器刷新的时候可以自定义逻辑,web 场景下会使用
registerListeners()
注册监听器,派发之前步骤产生的一些事件(可能没有)
finishBeanFactoryInitialization(beanFactory)
初始化所有的非单实例 bean
preInstantiateSingletons()
初始化剩下来的所有单实例 bean
在这里会循环所有的 beanNames,挨个调用 getBean() 方法创建对象
getBean(beanName)
根据 beanName 从工厂获取 bean,不存在会自动创建
afterSingletonsInstantiated()
如果 bean 是【SmartInitializingSingleton】类型,会回调这个方法
finishRefresh()
发布容器刷新完成事件
initLifecycleProcessor()
初始化和生命周期有关的后置处理器
getLifecycleProcessor().onRefresh()
拿到前面定义的生命周期处理器【LifecycleProcessor】回调 onRefresh() 方法
publishEvent(new ContextRefreshedEvent(this))
发布容器刷新完成事件
0 条评论
下一页