Spring ApplicationContext Init

Spring Web启动调用过程

ContextLoaderListener:ContextLoader:ServletContextListener#contextInitialized() 
				↓
initWebApplicationContext() 
				↓
configureAndRefreshWebApplicationContext() 
				↓
customizeContext() 	## 执行ApplicationContextInitializer#initialize()
				↓
ConfigurableWebApplicationContext#refresh()

在没有使用spring boot之前,一般常是使用tomcat做为外部容器启动java web应用,sping 在支持java web应用时,也遵循j2ee的标准。
在spring web中,spring 的启动入口是org.springframework.web.context.ContextLoaderListener,该类实现了javax.servlet.ServletContextListener接口,在web容器上下文初始化之后,将会调用ContextLoaderListener#contextInitialized(ServletContextEvent)方法,在该方法中,会执行org.springframework.web.context.ContextLoader#initWebApplicationContext(ServletContext)方法,调用ApplicationContext#refresh()。

Spring ApplicationContext 加载过程

AbstractApplicationContext#refresh() 
				↓
prepareRefresh() ## 处理refersh前的准备工作
				↓
obtainFreshBeanFactory() ## 创建BeanFactory,扫描注册BeanDefinition 
				↓
prepareBeanFactory() ## 处理BeanFactory的准备内容,初始化赋值
				↓
postProcessBeanFactory()
				↓
invokeBeanFactoryPostProcessors() ## 执行在context注册的BeanFactoryProcessor
				↓
registerBeanPostProcessors() ## 注册BeanProcessor
				↓
initMessageSource()
				↓
initApplicationEventMulticaster() ## 初始化ApplicationEventMulticaster
				↓
onRefresh() ## 初始化一些特殊的Bean, 例如Servlet或Reactive的WebServer
				↓
registerListeners() ## 注册ApplicationListener
				↓ 
finishBeanFactoryInitialization() ## 实例化剩余(除懒加载(@Lazy)外的)的单例Bean
				↓
finishRefresh() ## 执行LifecycleProcessor的onRefresh方法,发送ContextRefreshedEvent
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值