参考 https://www.cnblogs.com/theRhyme/p/11057233.html
一 springboot 启动原理及相关流程概览
springboot 是基于 spring 的新型的轻量级框架,最厉害的地方当属自动配置**。**那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置。
二 springboot 的启动类入口
用过 springboot 的技术人员很显而易见的两者之间的差别就是视觉上很直观的:springboot 有自己独立的启动类(独立程序)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
从上面代码可以看出,Annotation 定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以要揭开 SpringBoot 的神秘面纱,我们要从这两位开始就可以了。
三 单单是 SpringBootApplication 接口用到了这些注解
@Target(ElementType.TYPE) // 注解的适用范围,其中TYPE用于描述类、接口(包括包注解类型)或enum声明
@Retention(RetentionPolicy.RUNTIME) // 注解的生命周期,保留到class文件中(三个生命周期)
@Documented // 表明这个注解应该被javadoc记录
@Inherited // 子类可以继承该注解
@SpringBootConfiguration // 继承了Configuration,表示当前是注解类
@EnableAutoConfiguration // 开启springboot的注解功能,springboot的四大神器之一,其借助@import的帮助
@ComponentScan(excludeFilters = { // 扫描路径设置
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
...
}