主题
SpringBoot(框架/p72)
1.什么是 SpringBoot?
SpringBoot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。
2.SpringBoot 有哪些优点?
1.容易上手,提升开发效率,为 Spring 开发提供一个更快,更广泛的入门体验。
2.开箱即用,远离繁琐的配置
3.提供了一系列大型项目通用的非业务性功能,列如:内嵌服务器,安全管理,运行数据监控,运行状况检查和外部化配置等。
4.没有代码生成,也不需要 XML 配置
5.避免大量的 Maven 导入和各种版本冲突。
3.SpringBoot 的核心注解是哪个它主要有哪几个注解组成的?
启动类上面的注解是:
@SpringBootApplication 它也是 Spring Boot 的核心注解,主要组合包含了一下 3 个注解:
@SpringBootConfiguration:组合了@Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:@SpringBootAplication(exclude={DataSourceAutoConfiguration.class})。
@ComponentScan:Spring 组件扫描
配置
1.什么是 JavaConfig?
Spring JavaConfig 是 Spring 社区的产品,它提供了配置 Spring IOC 容器的纯 Java 方法,因此他有助于避免使用 XML 配置。使用 JavaConfig 的优点在于:
- 面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继续另一个,重写他的@Bean 方法等
- 减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 JAVA 之间来回切换。JAVAConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲,只使用 Java Config 配置类类配置容器是可行的,但实际上很多人认为将 JavaConfig 与 XML 混合匹配是理想的。
- 类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置 Spring 容器。由于 Java5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找
2.SpringBoot 自动配置原理是什么?
注解@EnableAutoConfiguration,@Configuration,@ConditionalOnClass 就是自动配置的核心,@EnableAutoConfiguration 给容器导入 META-INF/Spring.factories 里定义的自动配置类。
筛选有效的自动配置累。
每一个自动配置类结合对应的 xxxProperties.java 读取配置文件进行自动配置功能
3.你如何理解 Spring Boot 配置加载顺序
在 SpringBoot 里面,可以使用一下几种方式来加载配置:
- propertirs 文件
- YAML 文件
- 系统环境变量
- 命令行参数
4.什么是 YAML?
YAML 是一种人类可读的数据系列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加结构化,而且更少混搅。可以看出 YAML 具有分层配置数据
5.YAML 配置的优势在哪里?
YAML 现在可以算是非常流行的一种配置文件格式了,无论是前端还是后端,都可以见到 YAML 配置。那么 YAML 配置和传统的 properties 配置相比到底有哪些优势呢?
- 配置有序,在一些特殊的场景下,配置有序很关键
- 支持数组,数组中的元素可以是基本数据类型也可以是对象
- 简洁, 相比 properties 配置文件,YAML 还有一个缺点,就是不支持@PropertySource 注解导入自定义的 YAML 配置。
6.SpringBoot 是否可以使用 XML 配置?
SpringBoot 推荐使用 Java 配置而非 XML 配置,但是 SpringBoot 中也可以使用 XML 配置,通过@ImportResource 注解可以引入一个 XML 配置
7.Spring Boot 核心配置文件是什么?bootstrap.properties 和 application.properties 有何区别?
淡出做 SpringBoot 开发,可能不太容易遇到 bootstrap.properties 配置文件,但是在结合 SpringCloud 时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时候 SpringBoot 核心的两个配置文件:
- bootstrap(.yml 或者 .properties):bootstrap 由父 ApplicationContext 加载的,比 applic 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 SpringCloudConfig 或者 Nacos 中会用到它。且 bootstrap 里面的属性不能被覆盖;
- application(.yml 或者 .properties):由 ApplicatonContext 加载,用于 Springboot 项目的自动化配置
8.什么是 SpringProfiles?
Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在 PRODUCTION 中,某些其他 bean 可以加载。假设我们的要求是 Swagger 文档仅适用于 QA 环境,并且禁用所有其他文档。这可以使用配置文件来完成。SpringBoot 使得使用配置文件非常简单。
9.如何在自定义端口上运行 SpringBoot 应用程序?
为了在自定义端口上运行 SpringBoot 应用程序,您可以在 application.properties 中指定端口。server.port=8090
安全
1.如何实现 SpringBoot 应用程序的安全性?
为了实现 SpringBoot 的安全性,我们使用 Spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展 WebSecurityConfigurerAdapter 并覆盖其方法。
2.比较一下 SpringSecurity 和 Shiro 各自的优缺点?
由于 SpringBoot 官方提供了大量的非常方便的开箱即用的 Starter,包括 SpringSecerity 的 Starter,使得在 SpringBoot 中使用 SpringSecurity 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 SpringBoot 项目,一般选择 SpringSecurity。当然这只是一个建议的组合,单纯从技术上来说。无论怎么组合,都是没有问题的,Shiro 和 SpringSecurity 相比,主要有如下一下特点:
- SpringSecurity 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架
- SpringSecurity 概念复杂,配置繁琐;Shiro 概念简单、配置简单
- SpringSecurity 功能强大,Shiro 功能简单