Spring Boot原理初探笔记

自动配置:
pom.xml
spring-boot-dependencies:核心依赖在父工程中!
我们在写或者引入一些springboot依赖的时候,不需要指定版本,就因为有这些版本库.

启动器

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
</dependency>

Springboot会将大部的分常用功能场景,封装成一个个的启动器
比如`:

<artifactId>spring-boot-starter-web</artifactId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<artifactId>spring-boot-starter-tomcat</artifactId>

对应的启动器会帮我们导入所以相关的依赖!!!
我们要用什么功能,只需要找到对应的启动器添加进来.

主程序
注解(第一层)
@SpringBootApplication (标注这是一个Springboot应用)
内集成了多个注解(主要是下面三个)
第二层
@SpringBootConfiguration (springboot配置)
@EnableAutoConfiguration (自动导包)
@ComponentScan (包扫描,扫描当前主启动类同级的包)

第三层
//标注Springboot是一个spring组件
@SpringBootConfiguration=>@Configuration=>@Component

@EnableAutoConfiguration (自动导包)
下面导入了两个核心注解
@AutoConfigurationPackage (自动配置包)
@Import({AutoConfigurationImportSelector.class}) 自动配置导入选择器
第四层
@AutoConfigurationPackage (自动配置包)
下面导入一个自动注册器
@Import({Registrar.class}) (自动注册器)

@Import({AutoConfigurationImportSelector.class})

有两个方法:
getAutoConfigurationEntry(自动导入实体类)
getCandidateConfigurations(获取候选的配置)

第五层

getAutoConfigurationEntry(自动导入实体类)
调用
getCandidateConfigurations(获取候选的配置)
获取到

protected Class<?> getSpringFactoriesLoaderFactoryClass() {
    return EnableAutoConfiguration.class;
}

第六层
getCandidateConfigurations(获取候选的配置)
调用下面方法获取所有的候选配置名称
在这里插入图片描述

loadFactoryNames()
loadFactoryNames() 调用了 loadSpringFactories()

在这里插入图片描述
loadSpringFactories()方法

Enumeration<URL> urls = classLoader != null ? 
//获取项目资源
classLoader.getResources("META-INF/spring.factories") : 
//获取系统资源
ClassLoader.getSystemResources("META-INF/spring.factories");

在这里插入图片描述
思考:这么多自动配置为什么又得没有生效,需要导入对应得start才能有作用!
因为loadSpringFactories方法遍历这些自动配置文件的时候,会去判断带有:
@ConditionalOnXXX注解的条件是否满足类似@ConditionalOnClass
如果这里的条件都满足才会生效
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结论,springboot所有自动配置都是在启动的时候扫描并加载.
1.Springboot在启动的时候,从类路径下/META-INF/spring.factpries获取指定的值!
2.将这些自动配置的类导入容器,自动配置就会生效,进行自动配置!
3.以前在SSM框架,需要我们手动配置的东西,现在springboot帮我们做了.
4.整合javaEE,解决方案和自动配置的东西都在spring-boot-autoconfigure-2.2.7.RELEASE.jar
5.它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器中.
6.容器中也会存在非常多的XXXAutoConfigration的文件(@Bean)
Run方法执行流程图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值