SpringBoot的常见知识点汇总
1.什么是Spring Boot?
Spring Boot是Spring开源组织下的子项目,是Spring组件一站式解决方案,主要是简化了使用Spring的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。
2.SpringBoot的优点?
- 独立运行 Spring Boot而且内嵌了各种servlet容器,Tomcat、Jetty等,现在不再需要打成war包部署到容器中,Spring Boot只要打成一个可执行的jar包就能独立运行,所有的依赖包都在一个jar包内。
- 简化配置 spring-boot-starter-web启动器自动依赖其他组件,简少了maven的配置。
- 自动配置 Spring Boot能根据当前类路径下的类、jar包来自动配置bean,如添加一个spring-boot-starter-web启动器就能拥有web的功能,无需其他配置。
- 无代码生成和XML配置 Spring Boot配置过程中无代码生成,也无需XML配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是Spring4.x的核心功能之一。
- 应用监控 Spring Boot提供一系列端点可以监控服务及应用,做健康检测。
3.SpringBoot的缺点?
Spring Boot虽然上手很容易,但如果你不了解其核心技术及流程,所以一旦遇到问题就很棘手,而且现在的解决方案也不是很多,需要一个完善的过程。
4.Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是Spring Boot的核心注解,主要组合包含了以下3个注解:
@SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项。
@ComponentScan:启动组件扫描,这样你写的Web控制器类和其他组件才能被自动发现并注册为Spring应用程序上下文里的Bean。
5.Spring Boot 的核心配置文件有哪几个?它们的区别是什么?
Spring Boot有两种类型的配置文件,application和bootstrap文件。
区别:
application配置文件是应用级别的,是当前应用的配置文件。
bootstrap配置文件是系统级别的,用来加载外部配置,如配置中心的配置信息,也可以用来定义系统不会变化的属性。bootstatp文件的加载先于application文件。
6.Spring Boot 的配置文件有哪几种格式?它们有什么区别?
properties或者yml格式。
区别是书写格式不同,*.properties文件是key=value的形式; *.yml是key: value的形式,.yml 格式不支持 @PropertySource 注解导入配置。
7、运行 Spring Boot 有哪几种方式?
1)打包用命令或者放到容器中运行
2)用 Maven/ Gradle 插件运行
3)直接执行 main 方法运行
8.Spring Boot 自动配置原理是什么?
(1)SpringBoot启动时加载主配置类@SpringBootApplication,开启了自动配置功能@EnableAutoConfiguration;
(2)最重要的就是 @Import注解,其中的 AutoConfigurationImportSelector 类的作用就是往 IOC容器中导入组件。
(3)这个类的selectImports()方法,SpringFactoriesLoader.loadFactoryNames()从类路径得到资源,扫描所有jar包类路径下的MEAT-INF/spring.factories文件,把扫描到的这些文件的内容包装成factories对象,从factories中获得EnableAutoConfiguration.class类对应的值,然后把他们添加到容器中。
启动类上面的注解是@SpringBootApplication
进入 @SpringBootApplication 的源码可以看到@EnableAutoConfiguration开启自动配置功能
再进入 @EnableAutoConfiguration 源码
最重要的就是 @Import注解,其中的 AutoConfigurationImportSelector 类的作用就是往 IOC容器中导入组件。这个类中有一个方法是SpringFactoriesLoader.loadFactoryNames(),这个方法扫描具有MEAT-INF/spring.factories文件的jar包。
来到Springboot的jar包中META-INF下的spring.factories文件中看到很多自动配置类(xxxAutoConfiguration类),SpringBoot会根据这些自动配置类去自动配置环境
找到配置所有EnableAutoConfiguration的值加入到Spring容器中,所以说容器中最终会添加很多的类。
里面的类都是自动配置类,SpringBoot会根据这些自动配置类去自动配置环境。
每一个都是容器中的一个组件,并都加入到容器中。加入到容器中之后的作用就是用它们来做自动配置,这就是自动配置的开始,只有这些自动配置类进入到容器中以后,接下来这个自动配置类才开始进行启动。
所有在配置文件中能配置的属性都是在***Properties类中封装着,配置文件能配置什么就可以参照某个功能对应的这个属性类,它会根据不同的条件判断,来决定配置类是否生效,一旦配置生效,这个配置类就会给容器中添加组件。
(我们在配置的时候按照这个类中的要求对应配置,如果所有配置成功了,就往容器中添加组件,给容器中自动配置类添加组件的时候,会从properties类中获取某些属性,我们可以在配置文件指定这些属性的值。)
9.Spring Boot 配置加载顺序
(1)properties文件;(2)YAML文件;(3)系统环境变量;(4)命令行参数;
10.SpringBoot 实现热部署
引用devtools依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
11.Spring Boot 可以兼容老 Spring 项目吗,如何做?
可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件。
12.Spring Boot Starters启动器
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如你想使用Spring JPA访问数据库,只要加入spring-boot-starter-data-jpa启动器依赖就能使用了。
Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。