Spring MVC
- 什么是 Spring Boot?
- 为什么要用 Spring Boot?
- Spring Boot的缺点
- Spring Boot 的核心配置文件有哪几个?它们的区别是什么?
- bootstrap 配置文件特性。
- bootstrap/ application 的应用场景
- Spring Boot 的配置文件有哪几种格式?它们有什么区别?
- application.properties和application.yml文件可放位置?优先级?
- Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
- 开启 Spring Boot 特性有哪几种方式?
- Spring Boot 需要独立的容器运行吗?
- 运行 Spring Boot 有哪几种方式?
- Spring Boot 自动配置原理是什么?
- Spring Boot 的目录结构是怎样的?
- 你如何理解 Spring Boot 中的 Starters?
- 如何在 Spring Boot 启动的时候运行一些特定的代码?
- Spring Boot 有哪几种读取配置的方式?
- Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?
- SpringBoot 实现热部署有哪几种方式?
- 编写测试用例的注解?
- SpringBoot异常处理相关注解?
- 你如何理解 Spring Boot 配置加载顺序?
- Spring Boot 如何定义多套不同环境配置?
- 如何激活某个环境的配置?
- Spring Boot 可以兼容老 Spring 项目吗,如何做?
- 保护 Spring Boot 应用有哪些方法?
- SpringBoot的特征?
- Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?
- 针对请求访问的几个组合注解?
什么是 Spring Boot?
Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。
为什么要用 Spring Boot?
● 独立运行
● 简化配置
● 自动配置
● 无代码生成和XML配置
● 应用监控
● 上手容易
Spring Boot的缺点
Spring Boot虽然上手很容易,但如果你不了解其核心技术及流程,所以一旦遇到问题就很棘手,而且现在的解决方案也不是很多,需要一个完善的过程。
Spring Boot 的核心配置文件有哪几个?它们的区别是什么?
application 和 bootstrap 配置文件。
Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap, 另外一种是 application,。
bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。
bootstrap 配置文件特性。
boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载
boostrap 里面的属性不能被覆盖
bootstrap/ application 的应用场景
application 配置文件:主要用于 Spring Boot 项目的自动化配置。
bootstrap 配置文件有以下几个应用场景。
● 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
● 一些固定的不能被覆盖的属性;
● 一些加密/解密的场景;
具体请看这篇文章《Spring Boot 核心配置文件详解》。
Spring Boot 的配置文件有哪几种格式?它们有什么区别?
.properties 和 .yml,它们的区别主要是书写格式不同。
1).properties
app.user.name = javastack
2).yml
app: user: name: javastack
另外,.yml 格式不支持 @PropertySource 注解导入配置。
application.properties和application.yml文件可放位置?优先级?
-
外置,在相对于应用程序运行目录的/config子目录里。
-
外置,在应用程序运行的目录里。
-
内置,在confifig包内。
-
内置,在Classpath根目录。
这个列表按照优先级排序,优先级高的会覆盖优先级低的。
Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,它主要由@SpringBootConfiguration,@EnableAutoConfiguration和@ComponentScan这三个构成。
- @SpringBootConfiguration里面就只有一个@Configuration主要注解,也就是把该类变成一个配置类所以@SpringBootConfiguration就相当于@Configuration。
- @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
- @ComponentScan:Spring组件扫描。扫描包,该注解默认会扫描该类所在的包下所有的配置类
开启 Spring Boot 特性有哪几种方式?
Spring Boot依赖:使用Spring Boot很简单,先添加基础依赖包,有以下两种方式
1)继承spring-boot-starter-parent项目
2)导入spring-boot-dependencies项目依赖
Spring Boot 需要独立的容器运行吗?
可以不需要,内置了 Tomcat/ Jetty 等容器。
运行 Spring Boot 有哪几种方式?
1)打包用命令或者放到容器中运行
2)用 Maven/ Gradle 插件运行
3)直接执行 main 方法运行
Spring Boot 自动配置原理是什么?
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置。
Spring Boot 的目录结构是怎样的?
cn
+- javastack
+- MyApplication.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
| +- CustomerService.java
| +- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java
这个目录结构是主流及推荐的做法,而在主入口类上加上 @SpringBootApplication 注解来开启 Spring Boot 的各项能力,如自动配置、组件扫描等。
你如何理解 Spring Boot 中的 Starters?
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。
Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。
如何在 Spring Boot 启动的时候运行一些特定的代码?
可以实现接口 ApplicationRunner 或者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个 run 方法。
Spring Boot 有哪几种读取配置的方式?
Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量。
Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?
Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架。
SpringBoot 实现热部署有哪几种方式?
spring-boot-devtools
Spring Loaded
Jrebel
模版热部署
编写测试用例的注解?
@SpringBootTest
SpringBoot异常处理相关注解?
@ControllerAdvice
@ExceptionHandler
你如何理解 Spring Boot 配置加载顺序?
优先级从⾼到低,⾼优先级的配置覆盖低优先级的配置,所有配置会形成互补配置。
- 命令⾏参数。所有的配置都可以在命令⾏上进⾏指定;
- Java系统属性(System.getProperties());
- 操作系统环境变量 ;
- jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置⽂件
- jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置⽂件 再来加载不带profile
- jar包外部的application.properties或application.yml(不带spring.profile)配置⽂件
- jar包内部的application.properties或application.yml(不带spring.profile)配置⽂件
- @Configuration注解类上的@PropertySource
Spring Boot 如何定义多套不同环境配置?
application.properties:主配置文件
application-dev.properties:开发环境配置文件
application-test.properties:测试环境配置文件
application.prop-properties:生产环境配置文件
如何激活某个环境的配置?
比如我们激活开发环境。
yml:
spring: profiles: active: dev
properties:
spring.profiles.active=dev
命令行:
java -jar xiaoka-v1.0.jar ———spring.profiles.active=dev
Spring Boot 可以兼容老 Spring 项目吗,如何做?
可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件。
保护 Spring Boot 应用有哪些方法?
● 在生产中使用HTTPS
● 使用Snyk检查你的依赖关系
● 升级到最新版本
● 启用CSRF保护
● 使用内容安全策略防止XSS攻击
● …
SpringBoot的特征?
创建独立的Spring应用程序
直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件)
提供固化的“starter”依赖项,以简化构建配置
尽可能自动配置Spring和3rd Party库
提供可用于生产的功能,例如指标,运行状况检查和外部化配置
完全没有代码生成,也不需要XML配置
Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?
● 配置变更
● JDK 版本升级
● 第三方类库升级
● 响应式 Spring 编程支持
● HTTP/2 支持
● 配置属性绑定
● 更多改进与加强…
针对请求访问的几个组合注解?
@PatchMapping
@PostMapping
@GetMapping
@PutMapping
@DeleteMapping