SpringBoot的学习(长期更新!)
SringBoot的概述
SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。
SpringBoot的特点
- 为基于Spring的开发提供更快的入门体验
- 开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求
- 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等
pom.xml
- spring-boot-dependencies :核心依赖在父工程中
- 我们在写或者引入一些SPringboot依赖的时候,不需要指定版本,就因为有这些版本仓库
启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
- 启动器 :说白了就是Springboot的启动场景;
- 比如spring-boot-starter-web,他就会帮我们自动导入web环境所有的依赖!
- springboot会将所有的功能场景,都变成一个个的启动器
- 我们要使用什么功能,就只需要找到对应的启动器就可以了starter
主程序
//SpringBootApplication : 标注这个类是一个springboot 的应用
@SpringBootApplication
public class HelloworldApplication {
public static void main(String[] args) {
// 将springboot 应用启动
SpringApplication.run(HelloworldApplication.class, args);
}
}
注解
@springBootConfiguration : springboot的配置
@Configuration:spring配置类
@Component:说明这也是一个spring的组件
@EnableAutoconfiguration : 自动配置
@AutoconfigurationPackage :自动配置包
@Import(AutoconfigurationPackages.Registrar.class) :自动配置`包注册`
@Import(AutoconfigurationImportselector.class):自动配置导入选择
//获取所有的配置
List<String> configurations = getcandidateconfigurations(annotationMetadata,attributes);
获取候选的配置
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
return configurations;
}
META-INF/spring.factories :自动配置的核心文件
Properties properties = PropertiesLoaderutils.LoadProperties(resource);
所有资源加载到配置类中!
{card-default label="结论" width=""}
结论: springboot
所有自动配置都是在启动的时候扫描并加载: spring.factories
所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的 start
,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就配置成功!
springboot
在启动的时候,从类路径下/META-INF/lspring.factories
获取指定的值;- 将这些自动配置的类导入容器,自动配置就会生效,帮我进行自动配置!
- 以前我们需要自动配置的东西,现在
springboot
帮我们做了! - 整合 javaEE ,解决方案和自动配置的东西都在 spring-boot-autoconfigure-2.2.0.RELEASE.jar 这个包下
- 它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器;
- 容器中也会存在非常多的 xxAutoConfiguration 的文件(@Bean),就是这些类给容器中导入了这个场景需要的所有组件;并自动配置, @Configuration , JavaConfig!
- 有了自动配置类,免去了我们手动编写配置文件的工作!|
{/card-default}
SpringBoot-依赖管理特性
父项目做依赖管理
依赖管理
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
上面项目的父项目如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
它几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制
开发导入starter场景启动器
见到很多 spring-boot-starter- : 就某种场景
只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
更多SpringBoot所有支持的场景
见到的 *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。所有场景启动器最底层的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.3.4.RELEASE</version> <scope>compile</scope> </dependency>
- 无需关注版本号,自动版本仲裁
引入依赖默认都可以不写版本
引入非版本仲裁的jar,要写版本号。
可以修改默认版本号 看spring-boot-dependencies里面规定当前依赖的版本 用的 key。
在当前项目里面重写配置,如下面的代码。<properties> <mysql.version>5.1.43</mysql.version> </properties>