Spring boot 2 源码分析 四 启动流程04

五、准备容器

      将启动类注入容器,后续开启自动化配置

5.1  context.setEnvironment(environment);   给容器context设置环境,包括各种变量

5.2  postProcessApplicationContext(context); 执行后置处理动作

       

    这里默认不执行任何逻辑,因为beanNameGeneratorresourceLoader默认为空。之所以这样做,是springBoot留给我们的扩展处理方式,类似于这样的扩展,spring中也有很多。

5.3 调用 applyInitializers(context)  对容器进行初始化: 本质上是给ConfigurableApplicationContext下面的子context,增加对应的监听器applicationListener

5.4 listeners.contextPrepared(context); 也是一个空函数,什么也不做

     

 5.5 给容器context注册具体的单例singleton

 5.6 Set<Object> sources = getAllSources(); 获取所有启动容器所需要的配置,并且校验配置不能为空

 5.7  load(context, sources.toArray(new Object[0]));  加载启动类,注入到容器

      

  给loader设置beanNameGenerator,resourceLoader和environment,然后调用load()方法加载所有的source

按照source不同的类型,分别加载class,resource,package,charSequence,其余的类型就抛出异常不支持

最后listeners.contextLoaded(context); 监听器处理容器加载启动类,配置文件等完成的事件; 也就是容器准备完成的事件

load()方法加载, 先把bean包装成为beanDefinition,然后添加到容器的beanDefinitionMap中

 

 

      

 

 

    

      

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot2的启动流程是通过@SpringBootApplication注解自动化配置来实现的。该注解包含了多个注解的组合,其中包括@ComponentScan、@EnableAutoConfiguration和@Configuration等。通过这些注解,Spring Boot会自动扫描并加载配置类,并根据自动配置规则来配置应用程序。 具体而言,当应用程序启动时,Spring Boot会创建一个Spring应用程序上下文。在创建上下文的过程中,会先加载主配置类(通常是包含main方法的类),然后根据@ComponentScan注解扫描指定包下的所有组件。 接下来,Spring Boot会根据@EnableAutoConfiguration注解自动配置应用程序。这个注解会根据classpath和条件匹配的规则,加载配置类,并将它们注册到应用程序上下文中。这些配置类使用了@Configuration注解,会声明一些Bean,并根据条件来决定是否生效。 最后,Spring Boot会启动应用程序,并执行相应的事件处理器。这些事件处理器可以通过自定义ApplicationListener来实现。在应用程序运行期间,Spring Boot会触发不同的事件,并调用相应的事件处理器。 参考文献: 引用:SpringBoot2 | @SpringBootApplication注解 自动化配置流程源码分析(三) [2] 引用:SpringBoot2 | SpringBoot监听器源码分析 | 自定义ApplicationListener(六) 引用:该系列主要还是Spring的核心源码,不过目前Springboot大行其道,所以就从Springboot开始分析。最新版本是Springboot2.0.4,Spring5,所以新特性本系列后面也会着重分析

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值