1. SpringBoot 概述
SpringBoot 是Spring的一套快速配置脚手架,快速的将一些常用的第三方依赖整合(原理:通过Maven子父工程的方式),简化xml配置,全部采用注解形式,内嵌web应用容器(如:jetty和Tomcat),最终以java应用程序进行执行
2. SpringBoot的启动类入口
2.1 @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 {
...
}
3. @EnableAutoConfiguration
3.1 @AutoConfigurationPackge:自动装配包
@AutoConfigurationPackge与@ComponentScan一样,也是将主配置类所在的包以及子包里面的组件扫描到IOC容器中,但是@AutoConfigurationPackge扫描@Enitity,@MapperScan等第三方依赖的注解,而@ComponentScan只扫描@Controller,@Service这些常见注解
3.2 @Import(AutoConfigurationPackages.Registrar.class)
通过Import给Spring容器中导入了以Registrar注册器组件
3.3 @Import(AuroConfigurationImportSelector.class)
通过Import导入第三方提供的Bean的配置类:AutoConfigurationImportSelector:给容器导入组件该类中有selectImport方法,调用了getAutoConfigurationEntry()
其又调用了getCandidateConfigurations()
getCandidateConfigurations()中SpringFactoriesLoader.loadFactroyNames()方法
SpringFactoriesLoader.loadFactroyNames()中传入参数EnableAutoConfiguration.class
3.4 SpringFactoriesLoader概述
SpringFactoriesLoader属于Spring框架私有的一种扩展方案,其主要功能就是从指定的配置文件META-INF/spring.factories加载配置,加载工厂类
SpringFactoriesLoader为Spring工厂加载器,该对象提供了loadFactoryNames方法,入参为factoryClass和classloader即需要传入的工厂类名称和对应的类加载器,方法会根据指定的classLoader,加载该类加载器搜索路径下指定文件,即spring,factories文件
扫描所有jar包类路径下的META-INF/spring,factories文件,将扫描到的这些文件包装成properties对象,从properties中获取到EnbaleAutoConfiguration.class类名对应的值,将这些值添加到容器中,用这些类做自动装配功能
3.5 自动装配过程
1)通过各种注解实现了类与类之间的依赖关系,容器在启动的是偶SpringApplication.run(),调用EnbaleAutoConfigurationImportSelector.class的selectImports方法
2)selectImports方法调用SpringFactoriesLoader.loaderFactoryNames方法扫描jar包类路径下的META-INF/spring.fatories文件,获取BeanConfiguration列表
3)loaderFactoryNames方法读取spring.fatories中EnableAutoConfiguration.class类名对应的值
4)根据这些类上的注解判断,若条件满足,则该配置类生效,将配置文件中自己设置的属性配置到对应的配置类中,最后注入到IOC容器中实现自动配置
4. SpringBoot原理图
5. SpringApplication执行流程
6.SpringBoot的启动原理以及相关流程
本博客只做记录使用,参考了其他文献
版权归原作者 阿肆努力学习中 所有, 如有侵权,请联系我们删除。