1.为什么要有SpringBoot?

Spring 目的在简化 J2EE 企业应用程序开发,而 SpringBoot 是简化 Spring 开发,减少配置文件

2.说出用 SpringBoot 的主要优点
  • 开发基于 Spring 的应用程序比较容易
  • SpringBoot 项目开发时间明显减少
  • 不用编写大量 xml 配置和注释
  • 存在很多默认配置,来减少开发工作(可以修改)
  • 内嵌 Http 服务器,比如 Tomcat,可以更方便的开发和测试 web 应用程序
3.什么是 SpringBoot Starters?

是一系列依赖关系的集合,因为它的存在,项目依赖之间的关系就更加简单了【比如,在没有之前,开发 web 应用程序的时候,需要手动添加 SpringMVC 和 Tomcat等这些依赖,但有了之后,只需要添加一个 spring-boot-starter-web 一个依赖就可以了】

4.SpringBoot 支持哪些内嵌 Servlet 容器
  • Tomcat 9.0 使用 Servlet 版本是 4.0
  • Jetty 9.4 使用 Servlet 版本是 3.1
  • Undertow 2.0 使用 Servlet 版本是 4.0
5.如何在 SpringBoot 应用程序中使用 Jetty 而不是 Tomcat?

在 pom.xml 文件中修改依赖,或者 build.gradle 来配置

6.介绍一下 @SpringBootApplication 注解

@SpringBootApplication 这个注解可以看作是 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解的集合

  • @Configuration:允许在上下文中注册额外的 bean 或者导入其它配置类
  • @EnableAutoConfiguration:启动 SpringBoot 的自动配置机制
  • @ComponentScan:扫描被 @Component、@Service、@Controller 注解的 bean,会默认扫描该类所在包和包下所有的类
7.SpringBoot 的自动配置是如何实现的?

是因为 @SpringBootApplication 注解的原因,该注解包含的 @EnableAutoCOnfiguration 是启动自动配置的关键,它通过 Spring 提供的 @Import 注解导入了 AutoConfigurationImportSelector 类,该类中 getCandidaateConfigurations 方法会将所有自动配置类的信息以 List 的形式返回,这些配置信息会被 Spring 容器当作 bean 来管理。最后通过 @Conditional 注解以及它扩展的注解来吧 bean 交给 IOC

8.开发 RESTful Web 服务器常用的注解有哪些?
  • Spring Bean 相关的:
    • @Autowired:自动导入对象到类中
    • @RestController:是 @Controller 和 @ResponseBody的集合,标示是控制器 bean,并且吧返回值直接给到 http 响应体中
    • @Component:通用注解,表示是 Spring 组件,一般情况下如果不知道是哪个层的,就使用这个注解
    • @Repository:对应持久层,用于数据库相关操作
    • @Service:对应服务层,处理核心业务或者是复杂的逻辑
    • @Controoler:对应 Spring MVC 控制层,用来接收请求并调用服务层来吧数据给前端页面
  • hTTP 请求类型:
    • @GetMapping:GET 请求,通常是查询系列的
    • @PostMapping:POST 请求,通常是登录或者注册
    • @PutMapping:PUT 请求,通常是添加
    • @DeleteMapping:DELETE 请求,通常是删除
  • 前后端传值:
    • @RequestParam:获取查询参数
    • @PathVariable:获取路径参数
    • @RequestBody:用读取请求中数据为 json 格式的,会自动通过映射为 Java 对象
9.SpringBoot 常用的两种配置文件

application.properties 或者是 application.yml 进行配置,如果不配置就使用默认配置

10.什么是 YAML?YAML 配置的优势在哪里?

YAML 是一种可读的数据序列化语言,常用于配置文件。与属性文件相比,YAML 文件更加结构化,不容易混淆,也更管清晰,简介名了

11.SpringBoot 常用的读取配置文件的方法有哪些?
  • 通过 @value("${property}") 注解:读取比较简单的配置信息
  • 通过 @ConfigurationProperties 读取并与 bean 绑定【通过在使用的类上加 @Component 注解】
  • 通过 @ConfigurationProperties 读取并校验【使用类没有加 @Component 注解,要在使用这个类的地方通过 @EnableConfigurationProperties 注册,再通过注解比如@Email 来校验格式】
  • 通过 @PropertySource 读取指定的 properties 文件
12.SpringBoot 加载配置文件的优先级了解吗?

读取的是 yml 的话,如果它项目文件下存在 config 文件夹下,优先级是最高的,其次就是存在于 resources 下的 config 文件夹,最后是在 resources 下

如果按照同位置存在 properties 和 yml 还有 yaml 的话,优先级最高 properties 其次是 yml 最后是 yaml

13.常用的 Bean 映射工具有哪些?

Spring BeanUtils、Apache BeanUtils、MapStruct、ModelMapper、Dozer、Orika、JMapper【推荐使用 MapStruct】

14.SpringBoot 如何监控系统实际运行状况?

通过 SpringBoot Actuator 来进行简单的监控,添加完依赖以后,程序就会自带一些获取程序运行时的内部状态信息的 API

15.SpringBoot 如何做请求参数校验
  • JSR 提供的校验注解
    • @null:被注释的元素必须为 null
    • @NotNull:必须不为 null
    • @AssertTrue:必须为 true
    • @AssertFalse:必须为 false
    • @Min(value):必须是一个数字,而且值必须大于指定的最小值
    • @Max(value):必须是一个数字,而且值必须小于指定的最大值
    • @DecimalMin(value):与 Mix 相同,不同是设置的值是 字符串类型,而 Min 是 long 类型
    • @DecimalMax(value):与 Max 相同,不同...
    • @Size(max=,mix=):被注释的元素大小必须在指定的范围内
    • @Digits(integer,fraction):被注释的元素必须是一个数字,其值必须在可接收的范围内【只规定了数字的结构。如:整数位最多多少位,小数位最多多少位】
    • @Past:必须是一个过去的日期
    • @Future:必须是一个将来的日期
    • @Pattern(regex=,flag=):必须符合指定的正则表达式
  • Hibernate Validator 提供的校验注解
    • @NotBlank(message):验证字符串非 null,且长度必须大于 0
    • @Email:电子邮箱地址格式
    • @Length(mix=,max=):字符串的大小必须在指定的范围内
    • @NotEmpty:字符串必须是非空
    • @Range(minx=,max=,message):元素必须在合适的范围内
  • 验证请求体(ResponseBody 的参数):在参数上加 @Valid 注解,如果验证失败,则会抛出异常,默认情况下,Spring 会吧这个异常转化为 400 请求错误的状态码
  • 验证请求参数(路径参数和请求参数):在类上加 @Validated 注解来校验路径参数和请求参数
16.如何使用 SpringBoot 实现全局异常处理?

在处理异常类上使用 @ControllerAdivce 然后在方法上加 ExceptionHandler 来处理全局异常

17.SpringBoot 中如何实现定时任务?

使用 @Scheduled 注解在方法上面,比如给定设置 fixedRate = 5000 就是没五秒执行一次。注意的是需要在启动类上添加 @EnableScheduling 注解,作用就是发现 @Scheduled 注解然后执行该任务

results matching ""

    No results matching ""