Spring Boot 八股文

目录

重点

SpringBoot中的核心注解

介绍下SpringBoot的自动装配原理

基础

介绍下SpringBoot

SpringBoot有哪些优点

[Spring boot 常用注解](#Spring boot 常用注解)

[Spring Boot 中的监视器是什么?](#Spring Boot 中的监视器是什么?)

[谈谈你对spring 中starter的理解](#谈谈你对spring 中starter的理解)

介绍几个常用的starter

SpringBoot项目需要单独的Web容器吗

[Spring boot 项目启动方式](#Spring boot 项目启动方式)

[Spring boot 如何解决跨域问题](#Spring boot 如何解决跨域问题)

SpringBoot项目中如何使用log4j

[SpringBoot配置文件有哪些 怎么实现多环境配置](#SpringBoot配置文件有哪些 怎么实现多环境配置)

[如何使用 Spring Boot 实现异常处理](#如何使用 Spring Boot 实现异常处理)

拓展:

Condition


重点

SpringBoot****中的核心注解

@SpringBootApplication 注解,这个注解是一个组合注解
@ComponentScan: 默认情况下会扫描当前包及其子包下面所有被 @Component 注解修饰的 java 类
@SpringBootConfiguration :组合了 @Configuration 这个注解,也就是说明被 SpringBootApplication 所标识的Java 类就是一个 Java 配置类
@EnableAutoConfiguration :打开自动装配的功能 --- 》 META-INF/spring.factories 文件中加载需要自动注入的Java 类

介绍下SpringBoot的自动装配原理

自动配置是指在应用程序启动时,SpringBoot根据classpath类路径下的依赖自动应用配置程序所需的一系列bean和配置类,从而减少开发者的配置工作,提高开发效率。

Spring Boot的自动装配实际上是从 META-INF/spring.factories文件中获取到对应的需要进行自动装配的类,并生成相应的Bean对象,然后将它们交给Spring容器进行管理。

1、Spring Boot项目中@SpringBootApplication注解实现自动装配,这个注解是对三个注解进行了封装:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan,

2、其中@EnableAutoConfiguration是实现自动化配置的核心注解。

3、该注解通过@Import注解导入AutoConfigurationImportSelector,这个类实现了一个导入器接口ImportSelector。在该接口中重写了一个方法selectImports。

4、selectImports方法的返回值是一个数组,数组中存储的就是要被导入到spring容器中的类的全限定名。在AutoConfigurationImportSelector类中重写了这个方法。

5、该方法内部就是读取了项目的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。

6、在这些配置类中所定义的Bean会根据条件注解@Condition 所指定的条件来决定是否需要将其导入到Spring容器中

基础

介绍下****SpringBoot

基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突、引用的不稳定性得到了解决。

SpringBoot****有哪些优点

  1. 快速构建项目,可以选一些必要的组件;
  2. 对主流框架的无配置集成;
  3. 内嵌Tomcat容器,项目可独立运行;
  4. 删除了繁琐的xml配置文件;
  5. 极大地提高了开发和部署效率;
  6. 提供starter,简化maven配置;

Spring boot 常用注解

@RestController
@Service
@Autowired
@Resource
@RequestMapping GetMapping PostMapping
@Import:xml 文件中有个 import 标签引入其他的配置文件, @Import 其实是 import 标签的替代,也可
以导入第三方的配置类。而且和 @EnableXXX 可以实现功能模块的复用, @Import 注解还可以导入具体
的类型对象到 Spring 容器中,
@Indexed : Spring5 之后提供的提升 @ComponentScan 性能的一个主键
@EnableAutoConfiguration
@SpringBootApplication
@SpringBootConfiguration

Spring Boot 中的监视器是什么?

在Spring Boot中,监视器是一种用于监视应用程序运行状态和性能的组件。它可以收集关于应用程序的各种指标和统计数据,并将其展示在一个可视化的仪表盘上。监视器可以帮助开发人员识别和解决应用程序中的性能问题,并提供对应用程序的实时监控。Spring Boot中常见的监视器包括ActuatorSpring Boot Admin。 Actuator提供了一组内置的端点(endpoints),可以通过HTTP请求访问,并提供应用程序的关键指标和信息。Spring Boot Admin是一个基于Actuator的监控和管理工具,可以用于集中管理和监控多个Spring Boot应用程序。

作用:

性能监测:监视器可以帮助我们监测应用程序的性能,例如响应时间、吞吐量等。通过监视器,我们可以追踪和诊断应用程序中的性能瓶颈,以便进行优化和改进。

健康检查:监视器可以检查应用程序的健康状况,例如检测数据库连接是否正常、内存使用情况是否正常等。通过监视器,我们可以及时发现并处理应用程序的问题,确保应用程序的稳定运行。

应用程序管理:监视器可以帮助我们管理应用程序的状态,例如启动、停止、重新启动等。通过监视器,我们可以方便地对应用程序进行管理和操作。

监控报警:监视器可以设置阈值,并在达到或超过阈值时发送警报。通过监视器,我们可以实时监控应用程序的运行情况,并在出现问题时及时采取措施。

参考:Spring Boot 中的监视器

谈谈你对spring 中starter的理解

它是一组预定义的依赖项集合,旨在简化Maven或Gradle等构建工具中的依赖管理。每个Starter都包含了实现特定功能所需的库和组件,以及相应的配置文件,使得开发者能够快速整合Spring生态系统中的各种技术栈,提升开发效率。

Spring Boot Starter的主要作用包括:

  • 维护对应JAR包的版本依赖‌:Starter组件以功能为纬度,维护对应jar包的版本依赖,减少开发者对版本冲突的关注。
  • 导入所有的JAR包‌:Starter组件会将对应功能的所有jar包依赖全部导入,避免开发者自己引入依赖带来的麻烦。
  • 内部集成自动装配机制‌:Starter组件内部集成了自动装配机制,使得程序依赖对应的Starter组件后,能够自动集成到Spring Boot生态中。
  • 外部配置自动集成到SpringBoot‌:依赖Starter组件后,这些组件对应的功能所需要的维护的外部配置会自动集成到Spring Boot中,简化配置管理。

介绍几个常用的****starter

spring-boot-starter-web 提供了 SpringMVC+ 内嵌了 Tomcat 容器
spring-boot-starter-test:提供了 springboot 测试
spring-boot-starter-data-jpa: 提供了 SpringJPA 和 Hibernate
spring-boot-starter-data-redis: 提供了 Redis 服务
mybatis-spring-boot-starter: 提供了 MyBatis

SpringBoot项目需要单独的Web****容器吗

可以不需要, SpringBoot 项目中我们会添加 spring-boot-starter-web 这个依赖,而在这个依赖中内嵌了 Tomcat容器

Spring boot 项目启动方式

直接打成jar报启动或者打成war放入容器中启动

Spring boot 如何解决跨域问题

在请求时,如果出现了以下情况中的任意一种,那么它就是跨域请求

  1. 协议不同,如 http 和 https;

  2. 域名不同;

  3. 端口不同。

解决方式

1、通过配置文件实现跨域:实现 WebMvcConfigurer 接口;重写 addCorsMappings 方法,设置允许跨域的代码;

2、通过 CorsFilter 对象实现跨域;

3、使用 @CrossOrigin 注解实现跨域;

4、通过 Response 对象实现跨域;

5、通过实现 ResponseBodyAdvice 实现跨域。

参考:Spring Boot 解决跨域问题的 5种方案_springboot跨域-CSDN博客

SpringBoot项目中如何使用log4j

在SpringBoot项目中默认提供了日志框架Logback,所以我们如果需要引入log4j的话,必须先排查 Logback的依赖,然后再添加log4j的依赖,然后在src/main/resouces目录下创建log4j.properties文 件,然后就可以进行日志的相关的配置。

参考:Spring boot集成log4j及日志配置详解

SpringBoot配置文件有哪些 怎么实现多环境配置

Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。

application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。

bootstrap配置文件的特性:

1、bootstrap 由父 ApplicationContext 加载,比 applicaton 优先加载

2、bootstrap 里面的属性不能被覆盖;

3、需要在SpringCloud环境下才支持

如何使用 Spring Boot 实现异常处理

1、使用 @ControllerAdvice + @ExceptionHandler 注解处理全局异常

2、配置 SimpleMappingExceptionResolver 类处理异常

3、实现 HandlerExceptionResolver 接口处理异常

4、@ExceptionHandler 注解处理当前类异常

拓展:

Condition

Condition 是在Spring 4.0 增加的条件判断功能,通过这个可以功能可以实现选择性的创建 Bean 操作。

Condition 是一个接口,只有一个 matches 方法,返回 true 则表示条件匹配。matches 方法的两个参数分别是上下文信息和注解的元信息,从这两个参数中可以获取到 IOC 容器和当前组件的信息,从而判断条件是否匹配。

@Conditional是条件注解中的属性 value,其类型是 Condition 数组。组件必须匹配数组中所有的 Condition,才可以被注册。

在需要条件判断是否创建的对象可以间构造方法上添加**@Conditional在属性value中设置配置的**Condition实现在其中配置是否创建的条件

参考:Spring Boot自动配置原理

相关推荐
single59416 分钟前
【c++笔试强训】(第五篇)
java·开发语言·c++·vscode·学习·算法·牛客
独自等待你25 分钟前
java 泛型中的 ?
java
枫叶落雨22236 分钟前
mybatis-plus: mapper-locations: “classpath*:/mapper/**/*.xml“配置!!!解释
xml·java·mybatis
double丶flower36 分钟前
mybatis在mapper.xml中怎么处理大于、小于、不等于号
xml·java·mybatis
一只爱打拳的程序猿38 分钟前
pom.xml和spring-config.xml
xml·java·spring
tonysh_zds40 分钟前
freemarker 读取template.xml ,通过response 输出文件,解决中文乱码问题
xml·java·开发语言
软件聚导航41 分钟前
在uniapp中使用canvas封装组件遇到的坑,数据被后面设备覆盖,导致数据和前面的设备一样
java·前端·uni-app
将登太行雪满山_1 小时前
自存 关于RestController请求传参数 前端和后端相关
java·前端·spring boot
吴冰_hogan1 小时前
nacos配置中心入门
java·spring boot·spring·springcloud
泰山小张只吃荷园1 小时前
通过SpringTask模拟打印机定时向数据库传入模拟数据
java·开发语言·后端·spring·mybatis