1、什么是SpringBoot?
Spring Boot 本质上是 Spring 框架的延伸和扩展,它的诞生是为了简化 Spring 框架初始搭建以及开发的过程,使用它可以不再依赖 Spring 应用程序中的 XML 配置,为更快、更高效的开发 Spring 提供更加有力的支持。
它使用“习惯优于配置”(项目中存在大量的配置,此外还内置一个习惯性配置,让你无需手动进行配置)的理念让你的项目快速运行起来。使用SpringBoot很容易创建一个独立运行(运行Jar内嵌Servlet容器)准生产级别的基于Spring框架的项目,使用SpringBoot你可以不用或者只需要很少的Spring配置。
Spring Boot习惯优于配置的体现有很多,比如:1. Spring Boot Starter启动依赖,它能帮我们管理所有jar包版本;2. 默认加载的配置文件application.properties 等
追问:SpringBoot的优缺点?
优点:
- 更快速的构建能力:Spring Boot 提供了更多的 Starters 用于快速构建业务框架,Starters 可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找依赖包。
- 起步依赖:Spring Boot 提供了起步依赖,也就是在创建 Spring Boot 时可以直接勾选依赖模块,这样在项目初始化时就会把相关依赖直接添加到项目中,大大缩短了查询并添加依赖的时间。
- 内嵌容器支持:Spring Boot 内嵌了 Tomcat、Jetty、Undertow 三种容器,其默认嵌入的容器是 Tomcat(这个在我们启动 Spring Boot 项目的时候,在控制台上就能看到),使得开发人员可以不用额外配置服务器就可以快速搭建 Web 应用。
- 易于维护:Spring Boot 的代码结构清晰,易于维护。同时,Spring Boot 也提供了很多监控和管理的工具(如Actuator、Spring Boot Admin、Metrics、Trace、Logging等),可以帮助开发人员更好地维护系统。
- 易于部署:内置servlet容器,不需要在服务器部署 tomcat。只需要将项目打成 jar 包,使用 java -jar xxx.jar一键式启动项目
缺点:
- 学习成本:虽然 Spring Boot 简化了很多配置,但是它的学习曲线还是比较陡峭的,需要一定的学习成本。
- 过度封装:Spring Boot 封装了很多细节,但是有时候会使得开发者不知道实际发生了什么。
- 运行时占用资源:Spring Boot 应用程序启动时需要加载大量的类和依赖库,可能会占用较多的内存和 CPU 资源。
- 版本更新频繁:Spring Boot 的版本更新比较频繁,需要开发者及时了解和适应新的版本。
- 不适合复杂系统:Spring Boot 适合于快速开发小型项目,但是对于复杂的系统来说,可能会出现一些问题。
2、什么是SpringBoot Starter?
和自动配置一样,Spring Boot Starter的目的也是简化配置,而Spring Boot Starter解决的是依赖管理配置复杂的问题。
有了它,当我需要构建一个Web应用程序时,不必再遍历所有的依赖包,一个一个地添加到项目的依赖管理中,而是只需要一个配置spring-boot-starter-web。同理,如果想引入持久化功能,可以配置spring-boot-starter-data-jpa。
3、SpringBoot 常用的 Starter 有哪些?
- spring-boot-starter-web :提供 Spring MVC + 内嵌的 Tomcat 。
- spring-boot-starter-data-jpa :提供 Spring JPA + Hibernate 。
- spring-boot-starter-data-Redis :提供 Redis 。
- mybatis-spring-boot-starter :提供 MyBatis 。
4、运行 SpringBoot 有哪几种方式?
- 打包用命令或者放到容器中运行
- 用 Maven/Gradle 插件运行
- 直接执行 main 方法运行
5、Spring Boot 的核心注解是哪个?
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
- @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
- @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
- @ComponentScan:Spring组件扫描。
6、@value注解的原理
@Value的解析就是在bean初始化阶段。BeanPostProcessor定义了bean初始化前后用户可以对bean进行操作的接口方法,它的一个重要实现类AutowiredAnnotationBeanPostProcessor为bean中的@Autowired和@Value注解的注入功能提供支持。
7、Spring Boot 需要独立的容器运行吗?
不需要,内置了 Tomcat/ Jetty 等容器。
8、Spring Boot 支持哪些日志框架?
Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架,但是不管是哪种日志框架他都支持将配置文件输出到控制台或者文件中。
9、Spirng Boot常用的两种配置文件?
回答:一个是properties,另一个是yaml。
追问:什么是YAML?YAML配置的优势在哪里?
YAML现在可以算是非常流行的一种配置文件格式,无论是前端还是后端,都可以见到YAML配置。那么YAML配置和传统的properties配置相比到底有哪些优势呢?
- 配置有序。在一些特殊场景下,配置有序很关键。
- 支持数组,数组中的元素可以是基本数据类型也可以是对象。
- 简洁。
相比properties配置文件,YAML还有一个缺点,就是不支持@PropertySource注解导入自定义的YAML配置。