SpringBoot核心原理以及工作流程

SpringBoot简化了Spring应用的初始搭建及配置,通过@SpringBootApplication启动应用,其中@EnableAutoConfiguration开启自动配置。自动配置涉及SpringFactoriesLoader从META-INF/spring.factories加载配置。启动流程包括扫描jar包中的配置,根据条件生效并注入到IOC容器。
摘要由CSDN通过智能技术生成

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

 

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值