SpringApplication-run的简单流程

SpringApplication run

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值