看spring源码,spring源码解读,博客整理

Spring源码情操陶冶-ContextLoaderListener 

 ContextLoaderListener extends ContextLoader implements ServletContextListener

contextInitialized --->initWebApplicationContext();


ApplicationContext体系:



Spring源码情操陶冶-ContextLoader   

WebApplicationContext initWebApplicationContext(ServletContext servletContext)  


initWebApplicationContext方法里面有createWebApplicationContext方法 和configureAndRefreshWebApplicationContext 方法 。

createWebApplicationContext创建一个空的WebApplicationContext(XmlWebApplicationContext),configureAndRefreshWebApplicationContext方法为WebApplicationContext读取相应的配置并且刷新context对象。


configureAndRefreshWebApplicationContext方法包括指定contextConfigLocationSpring配置文件位置、给应用一个id倘若指定了contextId属性、 refresh()方法    ConfigurableWebApplicationContext.refresh()


ConfigurableWebApplicationContext extends WebApplicationContext, ConfigurableApplicationContext 


AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext, DisposableBean



ConfigurableApplicationContext 接口有void refresh() throws BeansException, IllegalStateException;  抽象方法。

只有一个实现类实现了方法 


所以 ConfigurableWebApplicationContext.refresh() 调用的是 AbstractApplicationContext的refresh()方法。

Spring源码情操陶冶-AbstractApplicationContext   refresh() 

refresh里面有这几个方法:

  • AbstractApplicationContext#prepareRefresh
    刷新准备工作,@prepareRefresh

  • AbstractApplicationContext#obtainFreshBeanFactory
    涉及解析spring配置文件并封装为BeanDefinition对象保存至beanFactory中,@obtainFreshBeanFactory

  • AbstractApplicationContext#prepareBeanFactory
    beanFactory的准备工作,设置context的属性配置,@prepareBeanFactory

  • AbstractApplicationContext#postProcessBeanFactory
    主要添加ServletContextAwareProcessor处理类,@postProcessBeanFactory

  • AbstractApplicationContext#invokeBeanFactoryPostProcessors
    执行BeanDefinitionRegistryPostProcessors/BeanFactoryPostProcessors相关beans,@invokeBeanFactoryPostProcessors

  • AbstractApplicationContext#registerBeanPostProcessors
    注册所有实现BeanPostProcessor的接口bean到beanFactory的内部属性beanPostProcessors集合中,@registerBeanPostProcessors

  • AbstractApplicationContext#initMessageSource
    初始化资源配置,@initMessageSource

  • AbstractApplicationContext#initApplicationEventMulticaster
    初始化ApplictionEventMulticaster广播事件类,@initApplicationEventMulticaster

  • AbstractApplicationContext#onRefresh
    初始化themeSource,@onRefresh

  • AbstractApplicationContext#registerListeners
    注册ApplicationListener beans到ApplictionEventMulticaster广播集合,@registerListeners

  • AbstractApplicationContext#finishBeanFactoryInitialization
    实例化所有的非lazy-init类型的beans,@finishBeanFactoryInitialization

  • AbstractApplicationContext#finishRefresh
    完成刷新,并执行ContextRefreshedEvent事件,该事件涉及spring mvc,@finishRefresh


Spring的BeanFactoryPostProcessor和BeanPostProcessor  

finishBeanFactoryInitialization() preInstantiateSingletons()  getBean() doCreateBean()  initializeBean()


configureAndRefreshWebApplicationContext方法之后WebApplicationContext对象已经完成 


WebApplicationContext对象赋给servletContext:

servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,this.context);


至此,initWebApplicationContext完成。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你是我的天晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值