SpringBoot的原理和执行过程

SpringBoot原理即执行过程

  • 在启动引导类中,找到@SpringBootApplication,@SpringBootApplication注解主配置类里边最主要的功能就是SpringBoot开启了一个@EnableAutoConfiguration注解的自动配置功能。进入查看,得知这是一个组合注解
    在这里插入图片描述
  • 接着进入@EnableAutoConfiguration注解
    在这里插入图片描述

1.进入开启自动配置包

  • 在@EnableAutoConfiguration注解中,有一个@AutoConfigurationPackage注解,字面意思可以得出自动配置包的意思
    在这里插入图片描述
    在这里插入图片描述
  • 我们在 Registrar 类中的 registerBeanDefinitions 方法上打上断点,可以看到返回了一个包名,该包名其实就是主配置类所在的包。
    在这里插入图片描述
  • 总结:@AutoConfigurationPackage 注解就是将主配置类(@SpringBootConfiguration标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器中。所以说,默认情况下主配置类包及子包以外的组件,Spring 容器是扫描不到的。

2.在@EnableAutoConfiguration(自动配置包)下的@Import({AutoConfigurationImportSelector.class})注解

  • AutoConfigurationImportSelector 的 selectImports 给Spring容器中来导入一些组件在这里插入图片描述
  • 调用顺序:getAutoConfigurationEntry() -> getCandidateConfigurations() -> loadFactoryNames()。
    在这里插入图片描述
  • 在上图中, getCandidateConfigurations方法得到的configurations它是获取候选的配置
    在这里插入图片描述
  • 在 getCandidateConfigurations方法中调用SpringFactoriesLoader.loadFactoryNames从类路径
    下得到一个资源

    在这里插入图片描述
  • 在loadFactoryNames方法中做了关键三步
    1. 从当前项目的类路径中获取所有 META-INF/spring.factories 这个文件下的信息
    2. 将上面获取到的信息封装成一个 Map 返回。
    3. 从返回的 Map 中通过刚才传入的EnableAutoConfiguration.class参数,获取该 key 下的所有值(资源)。
      在这里插入图片描述
  • 将类路径下 META-INF/spring.factories 里面配置的所有 EnableAutoConfiguration 的值加入到 Spring 容器中。加入到容器中之后的作用就是用它们来做自动配置,这就是Springboot自动配置之源,也就是自动配置的开始,只有这些自动配置类进入到容器中以后,接下来这个自动配置类才开始进行启动
    在这里插入图片描述
    在这里插入图片描述

3.自动配置类进行自动配置功能

  • HttpEncodingAutoConfiguration(HTTP的编码自动配置)为例子来解释SpringBoot的自动配置之原理:
    在这里插入图片描述
  • 因为 @EnableConfigurationProperties({HttpProperties.class}) 把配置文件中的配置项与当前 HttpProperties 类绑定上了。然后在HttpEncodingAutoConfiguration 中又引用了 HttpProperties ,所以最后就能在 HttpEncodingAutoConfiguration 中使用配置文件中的值了。最终通过 @Bean 和一些条件判断往容器中添加组件,实现自动配置。(当然该Bean中属性值是从 HttpProperties 中获取)
    在这里插入图片描述
  • 在HttpProperties 类中通过@ConfigurationProperties 注解将配置文件与自身属性绑定。
  • 所有在配置文件中能配置的属性都是在 xxxProperties 类中封装着;配置文件能配置什么就可以参照某个功能对应的这个属性类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值