文章目录
1、什么是SpringBoot ?
SpringBoot 以约定大于配置
核心思想,默认帮我们进行了很多设置,是 Spring开源组织下的子项目,是 Spring 组件一站式解决方案,主要简化了使用 Spring 的难度,简省了繁重的 xml 配置,提供了各种启动器,在运行过程中自定配置,开发者能够快速上手。
2、Spring Boot 有哪些优点?
- 容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验
- 开箱即用,远离繁琐的配置
- 提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。
- 没有代码生成,也不需要XML配置
- 避免大量的 Maven 导入和各种版本冲突
3、Spring Boot 的配置文件有哪几种格式?
有两种,分别为.properties
和 .yml
,其中.yml
格式不支持 @PropertySource 注解导入配置
4、SpringBoot的核心注解是哪个?它主要由哪几个注解组成的?
SpringBoot的核心注解是:@SpringBootApplication
它由三部分组成:
@SpringBootConfiguration
:这个注解组合了@Configuration
注解,实现配置文件的功能@EnableAutoConfiguration
:实现打开自动配置的功能,也可以关闭某个自动配置的选项,eg
:关闭数据自动配置功能:@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@ComponentScan
:Spring组件扫描
5、SpringBoot需要独立的容器运行吗?
可以不需要,因为SpringBoot内置了 Tomcat/ Jetty
等容器
6、运行SpringBoot有哪几种方式?
- 打成
jar
包用命令或者放到容器中运行 - 用
Maven/ Gradle
插件运行 - 直接执行
main
方法运行
7、Spring Boot 自动配置原理是什么?
SpringBoot启动的时候会通过@EnableAutoConfiguration注解
找到META-INF/spring.factories
配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration
结尾来命名的,它实际上就是一个JavaConfig
形式的Spring容器配置类,它能通过以Properties
结尾命名的类中取得在全局配置文件中配置的属性如:server.port
,而XxxxProperties类
是通过@ConfigurationProperties
注解与全局配置文件中对应的属性进行绑定的。
8、Spring Boot 配置加载顺序?
properties
文件yaml
文件 –可读的数据序列化语言,yaml
文件就更加结构化,而且更少混淆- 系统环境变量
- 命令行参数
9、 Spring Security 和 Shiro 各自的优缺点 ?
由于 SpringBoot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 SpringBoot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 SpringBoot 项目,一般选择 Spring Security 。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security 相比,主要有如下一些特点:
- Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架
- Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单
- Spring Security 功能强大;Shiro 功能简单
10、 你如何理解 SpringBoot 中的 Starters?
Starters 可以理解为启动器,它包含了一系列可以集成到应用中的依赖包,可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入 spring-boot-starter-data-jpa
启动器依赖就能使用了
11、 SpringBoot的特性
- 帮助开发者快速整合第三方框架(原理maven依赖特性)
- 完全不需要第三方服务器即可运行,内置了第三方容器
(tomcat/jetty/undertom)
(原理:tomcat容器使用java开发的) - 使用注解的方式来简化xml书写
12、Pom文件中导入的parent有什么作用?
- 定义
Java
编译版本为1.8
- 项目使用
UTF-8
编码。 - 继承自
spring-boot-dependencies
,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。 - 执行打包操作的配置。
- 自动化的资源过滤。
- 自动化的插件配置。
13、@SpringBootApplication 有什么作用
用于表示springboot应用程序,代表该类是一个springboot
的启动类
@xxxAutoConfiguration有什么作用
自动配置类(xxxAutoConfiguration)
,给容器中导入这个场景需要的所有组件,并配置好这些组件
15、AutoConfigurationImportSelector 有什么作用
- 组件的选择器
- 将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中