参考 https://www.cnblogs.com/theRhyme/p/11057233.html

一 springboot 启动原理及相关流程概览

springboot 是基于 spring 的新型的轻量级框架,最厉害的地方当属自动配置**。**那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置。
springboot 启动原理及相关流程概览 - 图1

二 springboot 的启动类入口

用过 springboot 的技术人员很显而易见的两者之间的差别就是视觉上很直观的:springboot 有自己独立的启动类(独立程序)

  1. public class Application {
  2. public static void main(String[] args) {
  3. SpringApplication.run(Application.class, args);
  4. }
  5. }

从上面代码可以看出,Annotation 定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以要揭开 SpringBoot 的神秘面纱,我们要从这两位开始就可以了。

三 单单是 SpringBootApplication 接口用到了这些注解

  1. @Target(ElementType.TYPE) // 注解的适用范围,其中TYPE用于描述类、接口(包括包注解类型)或enum声明
  2. @Retention(RetentionPolicy.RUNTIME) // 注解的生命周期,保留到class文件中(三个生命周期)
  3. @Documented // 表明这个注解应该被javadoc记录
  4. @Inherited // 子类可以继承该注解
  5. @SpringBootConfiguration // 继承了Configuration,表示当前是注解类
  6. @EnableAutoConfiguration // 开启springboot的注解功能,springboot的四大神器之一,其借助@import的帮助
  7. @ComponentScan(excludeFilters = { // 扫描路径设置
  8. @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
  9. @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
  10. public @interface SpringBootApplication {
  11. ...
  12. }

springboot 启动原理及相关流程概览 - 图2