直接干货
AbstractApplicationContext的refresh()方法是spring的核心,在其中完成了容器的初始化。我们先简单看下业务Bean的声明流程:
业务Bean的流程只是refresh函数中关于业务Bean创建的一个item,不过大致流程都是类似的。
IOC 大致流程
spring容器的入口refresh()
- obtainFreshBeanFactory()
- prepareBeanFactory(beanFactory):
- postProcessBeanFactory(beanFactory)
PS:通过上面准备BeanFactory的创建跟准备完成
5. invokeBeanFactoryPostProcessors(beanFactory)
- registerBeanPostProcessors(beanFactory)
- initMessageSource()
- initApplicationEventMulticaster()
- onRefresh()
- registerListeners()
- finishBeanFactoryInitialization(beanFactory)
- finishRefresh()
大致流程:刷新下做一些预处理工作,BeanFactory实例化,BeanFactory若干参数赋值,BeanFactory的后置处理器,一些注解Bean的注册操作,国际化,事件发布机制,监听机制,业务Bean的创建。涉及到单例模式,工程模式,适配器模式,以及动态代理等等。