0


SpringBoot核心原理以及工作流程

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的启动原理以及相关流程


本博客只做记录使用,参考了其他文献

标签: spring boot java spring

本文转载自: https://blog.csdn.net/asksl/article/details/128645551
版权归原作者 阿肆努力学习中 所有, 如有侵权,请联系我们删除。

“SpringBoot核心原理以及工作流程”的评论:

还没有评论