SpringBoot框架04-SpringBoot启动执行过程

  • SpringApplication对象实例初始化:

    a.选择应用环境类型判断上下文环境,如果web环境,则创建StandardServletEnvironment对象,否则创建StandardEnvironment对象。后面会根据上下文环境进行针对性的设置。

     执行SpringFactoriesLoader.loadFactoryNames方法,加载所有类路径下的META-INF/spring.factories文件中定义的全限定类名路径,包括maven中引入的spring-boot-starter相关jar包中。

     获取所有(包括jar)spring.factories文件中定义的全限定类名的值,放置到缓存集合中;

    b.初始化ApplicationContextInitializer应用上下文初始化器。在缓存集合中,在classpath根目录下搜索ApplicationContextInitializer类路径名,通过Java反射方式,加载实例化对象。

    c.初始化ApplicationListener监听器缓存集合中,在classpath根目录下搜索ApplicationListener路径名,通过Java反射方式,加载实例化对象

    d.推断并设置main方法的定义类。进入运行阶段。

  • 执行run方法:

    a. 初始化SpringApplicationRunListener启动监听器。springApplication对象实例化后,首先通过SpringFactoriesLoader查找并加载SpringApplicationRunListener。打开监听器监听整个启动流程;

    b. 加载应用环境Environment信息。将配置文件中的配置信息及main方法中传入的参数信息,加载到Environment(包括配置要使用的PropertySource以及Profile)

    c. 初始并实例化ApplicationContext对象默认是创建并使用非Web环境下为AnnotationConfigApplicationContext,基于注解的依赖注入;Web环境下为AnnotationConfigServletWebServerApplicationContext;Reactive Web环境下为AnnotationConfigReactiveWebServerApplicationContext。以上三个类构造器中,会构造一个AnnotationBeanDefinitionReader对象和ClassPathBeanDefinitionScanner对象,在构造AnnotationBeanDifinitionReader对象过程中会向bean factory添加注解处理器和事件监听处理器BeanDefinition,为后续的配置解析作准备。这样,就能通过JavaConfig构建BeanDefinition并实现自动扫描。

    d. 设置Environment参数到ApplicationContext。ResourceLoaderEnvironment信息设置到ApplicationContext中。同时将起始类加载ApplicationContext应用上下文中,这是Bean的加载工作的起点。同时将ApplicationContextInitializer应用到ApplicationContext中。

    e. 刷新ApplicationContext

        1)初始化BeanFactory。获取Context的BeanFactory;

        2)设置BeanFactory属性和注册相关Bean。比如:给BeanFactory设置ClassLoader,SpEL解析器,添加BeanPostProcessor;注册Environment相关的BeanBeanFactory

        3)创建并初始化相关的对象,并注册到容器中。比如BeanPostProcessor, MessageSource等。

        4)结束BeanFactory初始化实例化所有定义为非懒加载的Bean到容器中,并发送结束事件到所有Listener监听器。

    d. 调用执行ApplicationContext中的ApplicationRunnerCommandLineRunnerrun方法。实现该接口,主要是用于实现在容器启动成功后,去执行一段代码逻辑,这段初始化代码在整个应用生命周期内只会执行一次。可利用@Order注解(或实现Order接口)来规定所有的CommandLineRunner实例的运行顺序,value值越小,优先级越高。

    e. 异常处理。异常时,发送ApplicationReadyEventApplicationFailedEvent到所有Listener监听器。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值