什么是SpringBoot,为什么用SpringBoot

SpringBoot是Spring组件一站式解决方案。
优点: 最大的特点开箱即用,简化了Spring使用难度,简化了配置,提供了各种启动器,上手容易,内置Tomcat,DEV热部署。

SpirngBoot 的核心配置文件有哪几个,区别是啥?配置文件有哪些格式?

  • application配置文件 主要用于SpringBoot项目的自动化配置。
  • bootstrap配置文件
    • 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
    • 一些固定的不能被覆盖的属性;
    • 一些加密/解密的场景;

配置文件可以是yml格式和properties格式。

Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:

  • @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
  • @ComponentScan:Spring组件扫描。

SpringBoot启动发生了什么

1、new了一个SpringApplication对象,使用SPI技术加载加载 ApplicationContextInitializer、ApplicationListener 接口实例
2、调用SpringApplication.run() 方法
3、调用createApplicationContext()方法创建上下文对象,创建上下文对象同时会注册spring的核心组件类(ConfigurationClassPostProcessor 、AutowiredAnnotationBeanPostProcessor 等)。
4、调用refreshContext() 方法启动Spring容器和内置的Servlet容器

SpringBoot 自动配置原理

不纠结于自动装配原理!!!!

  1. SpringBoot启动类上面又一个@SpringBootApplicaiton,这个是复合注解,里面有一个叫做@EnableAutoConfiguration的注解,他的作用就是开启自动装配。
  2. @EnableAutoConfiguration也是一个复合注解,里面有个@Import,注入了一个AutoConfigurationImportSelector.class类,这个类有个方法selectImports,会返回一个字符串数组,数组里放的是类的全路径,这些类的全路径都会被加载到spring的Ioc容器中,Spring在读到这些类的全路径的时候,会把这些类通过反射的方式放到IoC容器中,这些类就变成了Bean。
  3. 这个字符串数组是SpringFactoriesLoader.loadFactoryNames加载了META-INF/spring/factories文件,这个文件是K-V形式。

image.png

如何理解Spring Boot中的Starter

  1. Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/2934222/1615514202890-f09f6b30-a442-4164-8dba-35f6be14c69e.png#align=left&display=inline&height=157&margin=%5Bobject%20Object%5D&name=image.png&originHeight=180&originWidth=895&size=170736&status=done&style=none&width=781)

SpringBoot如何解决跨域问题(重点)

  • 前端也可以解决跨域问题:JSONP,但是只能解决GET请求的跨域问题。
  • SpringBoot解决跨域问题主要有两种方式
    • 加一个配置类,实现WebMvcConfigurer接口,重写addCorsMappings方法。
    • 添加注解到controller类或method上 @CrossOrigin(origins = "http://localhost:8080",methods = RequestMethod.POST,allowCredentials = "true")

image.png

什么是嵌入式服务器?为什么要使用嵌入式服务器

image.png

SpringBoot配置加载顺序(了解即可)

1、开发者工具 Devtools 全局配置参数;
2、单元测试上的 @TestPropertySource 注解指定的参数;
3、单元测试上的 @SpringBootTest 注解指定的参数;
4、命令行指定的参数,如 java -jar springboot.jar --name="Java技术栈"
5、命令行中的 SPRING_APPLICATION_JSONJSON 指定参数, 如 java -Dspring.application.json='{"name":"Java技术栈"}' -jar springboot.jar
6、ServletConfig 初始化参数;
7、ServletContext 初始化参数;
8、JNDI参数(如 java:comp/env/spring.application.json);
9、Java系统参数(来源:System.getProperties());
10、操作系统环境变量参数;
11、RandomValuePropertySource 随机数,仅匹配:ramdom.*
12、JAR包外面的配置文件参数(application-{profile}.properties(YAML)
13、JAR包里面的配置文件参数(application-{profile}.properties(YAML)
14、JAR包外面的配置文件参数(application.properties(YAML)
15、JAR包里面的配置文件参数(application.properties(YAML)
16、@Configuration配置文件上 @PropertySource 注解加载的参数;
17、默认参数(通过 SpringApplication.setDefaultProperties 指定);

运行SpringBoot有哪几种方式?

  1. 打包用命令或者放到容器中运行
  2. 用Maven插件运行
  3. 直接执行main方法

    开启SpringBoot特性的两种方式

  • 导入spring-boot-starter-parent项目 在分布式常用
  • 导入spring-boot-dependencies 项目依赖 ```xml
    org.springframework.boot
    spring-boot-dependencies
    1.5.6.RELEASE
    pom
    import


org.springframework.boot spring-boot-starter-parent 1.5.6.RELEASE
```

SpringBoot2更新了解吗(了解一下就行了)

1.基于 Java 8,支持 Java 9,这意味着不可以使用JDK7 或更旧的版本运行SpringBoot2.
2.支持 Quartz 调度程序
3.大大简化了安全自动配置
4.支持嵌入式 Netty
5.Tomcat, Undertow 和 Jetty 均已支持 HTTP/2
6.全新的执行器架构,支持 Spring MVC, WebFlux 和 Jersey
7.使用 Spring WebFlux/WebFlux.fn 提供响应式 Web 编程支持
8.为各种组件的响应式编程提供了自动化配置,如:Reactive Spring Data、Reactive Spring Security 等
9.用于响应式 Spring Data Cassandra, MongoDB, Couchbase 和 Redis 的自动化配置和启动器 POM
10.引入对 Kotlin 1.2.x 的支持,并提供了一个 runApplication 函数,让你通过惯用的 Kotlin 来运行 Spring Boot 应用程序。更多信息请参阅参考文档中对 Kotlin 的支持部分
11.启动时的 ASCII 图像 Spring Boot banner 现已支持 GIF=

如何实现 Spring Boot 应用程序的安全性?

为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter 并覆盖其方法。

比较一下 Spring Security 和 Shiro 各自的优缺点 ?

由于 Spring Boot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 Spring Boot 项目,一般选择 Spring Security 。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security 相比,主要有如下一些特点:
Security把权限给角色->把角色给->用户

Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架
Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单
Spring Security 功能强大;Shiro 功能简单

Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?

Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架。