SpringApplication run
- stopWatch,listener,errorReporter 监听或统计
- createApplication()->初始实例化不同类型的ApplicationContext
- prepareContext()->覆盖替换自定义的一些beanGenerator sources 及参数准备,打印banner/listener/环境自定义配置等。
- refreshContext() ->AbstractApplicationContext的refresh()->
- prepareRefresh() propertySource初始化 environment校验 添加listener event事件
- obtainFreshBeanFactory() 设置获取beanFactory,防止重复加载
- prepareBeanFactory(beanFactory) 添加BeanClassLoader/beanExpressionResolver/PropertyEditorRegistrar-(bean解析加载的基础类) 处理Aware包装类等一些BeanPostProcessor添加,包含动态织入BeanPostProcessor则添加;注册环境bean
- try{ postProcessBeanFactory(beanFactory) ->子类添加处理 (诸如扫描注册beanDefinition等)
- invokeBeanFactoryPostProcessors(beanFactory) 执行优先级高的BeanFactoryPostProcessor等及自定义的BeanFactoryPostProcessor
- registerBeanPostProcessors(beanFactory) 注册BeanPostProcessor,在getBean时通过before/after执行一些方法,before可改变bean。AOP通过beanPostProcessor加载ordered顺序的 processor实现,对应InstantiationAwareBeanPostProcessor,通过不同的实现类区分不同的代理实现。相关的aop动态代理类由cglib或jdk反射(含接口默认为jdk反射)-创建proxy代理,通过intecpect或method invoke前后添加方法, 静态代理则为aspect编译改变修改的类
- initMessageSource() initApplicationEventMulticastor
- onRefresh() 触发子类的特殊处理
- registerListeners()
- finishBeanFactoryInitialization(beanFactory) 初始化剩余的非lazyInit的 singleton bean
- finishRefresh() public相关event
- }catch(BeansException ex){destoryBeans cancelRefresh(ex)} 销毁bean并取消active状态
- finally{resetCommonCaches()}
- afterRefresh
- stopWatch listener report等结束或启动回调 callRunners执行自定义程序/任务