1.对SpringBoot的理解?
SpringBoot主要用来简化使用Spring的难度和繁重的XML配置,它是Spring组件的一站式解决方案,采取了约定优于配置的方法。通过.properties或者.yml文件替代了Spring繁杂的XML配置文件,同时支持@ImportResource注解加载XML配置。Spring Boot还提供了嵌入式HTTP服务器、命令行接口工具、多种插件等等,使得应用程序的测试和开发简单起来
2.SpringBoot的优点
-
为基于Spring的开发提供更快的入门体验
-
开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求
-
提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等
-
SpringBoot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式
3.SpringBoot的核心注解是哪一个,由哪些注解组成
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解
- @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能
- @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能
- @ComponentScan:Spring组件扫描
4.SpringBoot 的核心配置文件有哪几个?它们的区别是什么?
Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。
- application 配置文件主要用于 Spring Boot 项目的自动化配置。
- bootstrap 配置文件有三个应用场景。
- 使用Spring Cloud Config配置中心时,需要在 bootstrap 配置文件中添加连接到配置中心的配置属性,来加载外部配置中心的配置信息
- 一些固定的不能被覆盖的属性
- 一些加密或解密的场景
5.SpringBoot的配置文件有哪几种格式?它们有什么区别?
主要有.properties 和 .yml格式,它们的区别主要是书写格式不同。另外,.yml 格式不支持 @PropertySource 注解导入配置
6.SpringBoot有哪几种读取配置的方式
- 使用@Value注解加载单个属性值
- 使用@ConfigurationProperties注解可以加载一组属性的值,针对于要加载的属性过多的情况,比@Value注解更加简洁
7.SpringBoot的四大核心组件
-
SpringBoot Starter
-
Starter 帮我们封装好了所有需要的依赖,避免我们自己添加导致的一些Jar包冲突或者缺少包的情况
-
Starter帮我们自动注入了需要的Bean实例到Spring 容器中,不需要我们手动配置(这个可以说是starter干的,实际上并不是,这里埋个坑,下面解答)
所以:
starter包的内容就是pom文件,就是一个依赖传递包
-
-
SpringBoot Autoconfigure
-
autoconfigure内容是配置Bean实例到Spring容器的实际代码实现包,然后提供给starter依赖。所以说1.2.3中的b项所说的配置Bean实例到Spring容器中实际是autoconfigure做的,因为是starter依赖它,所以也可以说是starter干的。
所以:
Autocinfigure是starter体现出来的能力的代码实现
-
-
SpringBoot CLI
- 是 Spring Boot 命令行工具。在 Spring Boot CLI 可以跑 Groovy 脚本,通过简单的 Java 语法就可以快速而又简单的学习 Spring Boot 原型:
-
SpringBoot Actuator
- Actuator是Springboot提供的用来对应用系统进行自省和监控的功能模块,借助于Actuator开发者可以很方便地对应用系统某些监控指标进行查看、统计等
8.SpringBoot 自动配置原理是什么
@EnableAutoConfiguration注解、 @Configuration注解和 @ConditionalOnClass注解组成了Spring Boot自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置。具体是通过maven读取每个starter中的spring.factories文件,该文件配置了所有需要被创建在spring容器中的bean
9.如何使用 SpringBoot 实现异常处理
使用@ControllerAdvice和@ExceptionHandler注解
@ControllerAdvice
public class LocalExceptionHandler {
@ExceptionHandler(ResultException.class)
@ResponseBody
public Result handleResultException(ResultException e) {
return Result.exception("500", "操作异常", e.getMessage());
}
@ExceptionHandler(MaxUploadSizeExceededException.class)
public ModelAndView handleResultException(MaxUploadSizeExceededException e) {
PageData.entityToMap(Result.exception("403", "上传文件过大"));
return new ModelAndView("", PageData.getMap());
}
@ExceptionHandler(Exception.class)
@ResponseBody
public Result handleResultException(Exception e) {
return Result.exception("500", "操作异常", e.getMessage());
}
}
10.什么是 JavaConfig
JavaConfig 是 Spring 社区的产品,它提供了配置 Spring IoC 容器的纯 Java 方法,有助于避免使用 XML 配置
11.什么是 Spring Profiles
Spring Profiles 允许用户根据配置文件(dev,prod,test等等)来注册 bean。当应用程序在开发环境中运行时,只有某些 bean 可以加载,而在生产环境中,某些其他 bean 也可以加载。比如要求 Swagger 文档仅适用于测试环境,并且禁用所有其他文档,可以使用配置文件来完成
12.如何实现 SpringBoot 应用程序的安全性
为了实现 Spring Boot 的安全性,可以使用 spring-boot-starter-security 依赖,添加安全配置和重写WebSecurityConfigurerAdapter 配置类的方法,也可以使用shiro
13.SpringBoot如何解决跨域问题
可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题