SpringBoot自动配置

SpringBoot可以说是Spring和SpringMVC的进一步封装,以及一些其他东西的封装,底层依旧是Spring和SpringMVC。

研究它的源码就是要弄懂为什么一个注解@SpringBootApplicationSpringApplication.run(Springboot01HelloworldApplication.class, args);就可以把spring容器,以及Tomcat以及springmvc都整合并启起来。

两个部分:

1、依赖环节:SpringBoot抽取各种Spring-Boot-Starter-xxx场景启动器,给我们导入了很多依赖(spring、springMVC、embedTomcat嵌入式Tomcat)

2、运行原理:

@SpringBootApplication拆解

@SpringBootConfiguration   //里边是@Configuration表示是一个配置类,就会去分析注解
      |--@Configuration
          
@EnableAutoConfiguration
      |--@AutoConfigurationPackage
           |--@Import({Registrar.class})  //导入组件
      |--@Import({AutoConfigurationImportSelector.class}) //导入组件
          
          
@ComponentScan

如上可知核心就是@EnableAutoConfiguration导入的两个组件

所以紧接着分析这两个组件到底导了啥

1、第一处
@Import({Registrar.class})
AutoConfigurationPackage  //指定我们以后要扫描那些包下的组件
2、第二处
@Import({AutoConfigurationImportSelector.class})
  SpringFactoriesLoader.loadFactoryNames(); 去类路径下找 MATE-INF/spring.factories文件
    SPI机制;
  spring.factories文件下即可找到EnableAutoConfiguration下的所有配置类      xxxAutoConfiguration(130个左右)这些就是默认的全场景配置类(配置类功能只有一个:给容器中放组件【@bean】,接下来就是spring容器接管了)
    加载了130个配置类后,我们不可能都需要用,所以会进行排除和过滤,以及每个配置类上都有@ConditionalOn注解来判断是否生效
    接着将剩下的我们所需要的配置类放到entries集合中

SpringBoot自动配置

SpringBoot导入相关组件后,spring启动容器、springMVC启动容器、嵌入式Tomcat启动

可见SpringBoot的强大之处在于自动配置,里边各种判断,各种导入。

SpringBoot自动配置

上一篇:C语言 数组下标越界 - C语言零基础入门教程


下一篇:SpringMVC--拦截器、异常处理器、全注解开发、SpringMVC执行流程