本文目录如下:
- 九、Spring Boot
- 一、Spring 基础知识
- 什么是 Spring 框架?
- Spring 框架主要包含哪些模块?
- @ - Spring 常用注解有哪些?
- @ - @RestController 和 @Controller 有什么区别?
- IOC - 解释一下什么是 Spring IOC (控制反转)?
- IOC - Spring Bean 是什么?Bean 的生命周期是怎样的?
- IOC - Spring Bean 的作用域有哪些?
- IOC - Spring 单例 Bean 是线程安全的吗?
- IOC - @Component 和 @Configuration 的区别?
- IOC - @Bean 注解有什么作用?
- IOC - @Autowired 和 @Resource 有什么区别?
- IOC - 什么情况下 Bean 会失效?
- IOC - Spring 中的循环依赖 是怎么解决的?
- Spring 有哪几种读取配置的方式?
- AOP - 解释一下什么是 AOP (面向切片编程)?
- AOP - Spring AOP 应用场景?
- 简单介绍下 Spring 的 事件机制 (事件监听器)?
- 二、Spring Boot 基础知识
- 三、Spring Boot 事务
- 四、其他
- 十、Spring Cloud 基础知识
- 十一、Mybatis-Plus
九、Spring Boot
一、Spring 基础知识
什么是 Spring 框架?
Spring
是 一个 轻量级 Java 开发框架,可以提高系统的 开发效率。Spring 的 核心概念:
控制反转
(IOC):由 Spring IOC 容器 管理 对象 的 生命周期 (此时称为 Bean)。面向切面
(AOP)
Spring 框架主要包含哪些模块?
spring-core
:提供了 Spring 框架 的 基本核心工具类。spring-beans
:提供对 Bean 的 创建、管理 等功能。spring-aop
:提供了 面向切面编程 实现。spring-web
:提供对 Web 功能 的基础支持。spring-webmvc
:提供对 Spring MVC 的实现。
@ - Spring 常用注解有哪些?
@Controller
:用于标记 控制层。@Service
:用于标记 业务逻辑层。@RequestMapping
等: 处理 请求地址映射。@Autowired
: 按照 类型(Type) 自动注入 Bean。@Value
:加载 单个属性值。
@ - @RestController 和 @Controller 有什么区别?
- @RestController 由 @Controller 和 @ResponseBody 组成。
@Controller
:用于构建 传统 Web 应用程序,返回 视图 或 数据。@RestController
:用于构建 RESTful 应用程序,返回 JSON 数据。
IOC - 解释一下什么是 Spring IOC (控制反转)?
IOC
(控制反转): 是一种设计思想,把设计好的对象交给 容器 控制,而不是在 程序中 手动控制。- 在Spring 框架中,由 Spring 来负责控制 对象的生命周期 。(Spring 提供了一个容器,称为
IoC容器
)、(IoC容器 中管理的 对象, 叫做Bean
)
IOC - Spring Bean 是什么?Bean 的生命周期是怎样的?
Spring Bean
指的是将自己的 生命周期,交给Spring IoC
容器 来管理的 对象。
Spring Bean 的 生命周期 如下:
实例化
属性赋值
初始化
销毁
IOC - Spring Bean 的作用域有哪些?
单例模式
: IoC 容器中只有 唯一的 Bean。(Spring Bean 默认是 单例模式)。每次获取创建
: 每次获取 都会 创建新的 Bean。每次HTTP请求创建
: 每个 HTTP 请求 都会 创建新的 Bean。
IOC - Spring 单例 Bean 是线程安全的吗?
结论:有 可变成员变量 的 单例 Bean 不是线程安全的,否则就是 线程安全的。解决方法:
- 尽量 避免 在 Bean 中定义 可变的成员变量。
- 将 Bean 中的 成员变量 保存在 ThreadLocal 中。
IOC - @Component 和 @Configuration 的区别?
@ComponentScan
注解 可以扫描到@Configuration
和@Component
的类
,并将其交由Spring Ioc
容器 管理。区别:
@Component
标注在 类 上, 将该 类 交给 Spring Ioc容器 进行管理。@Configuration
需要搭配@Bean
使用。@Bean
标注在 方法 上, 将该方法 返回 的 实例化对象 交给 Spring Ioc容器 进行管理。
IOC - @Bean 注解有什么作用?
@Bean
标注在 方法 上, 将该方法 返回 的 实例化对象 交给 Spring Ioc容器 进行管理。- 注1: @Bean 注解作用在
方法
上。- 注2: @Bean 一般和
@Configuration
一起使用。
IOC - @Autowired 和 @Resource 有什么区别?
@Autowired
:Spring 内置的注解,默认的注入方式为byType
(根据 类型 进行匹配)。@Resource
:JDK 提供的注解,默认注入方式为byName
(根据 名称 进行匹配)。
IOC - 什么情况下 Bean 会失效?
@ComponentScan
扫描路径配置错误@Bean
标注的方法 重名,即beanName
相同,导致 Bean 被 覆盖。
IOC - Spring 中的循环依赖 是怎么解决的?
Spring 通过
三级缓存
来解决循环依赖
问题:
第一级缓存
:存放 完整 的 Bean对象,这些对象可以 直接使用。第二级缓存
:存放的 Bean对象 已经 实例化,但还没有完成 属性填充,这个缓存主要用于解决 循环依赖 问题。第三级缓存
:存放 Bean 工厂,主要用于解决 AOP场景 下的 循环依赖 问题。
Spring 有哪几种读取配置的方式?
@Value
注解:加载 单个属性值。
AOP - 解释一下什么是 AOP (面向切片编程)?
Spring AOP 使用实例
Spring AOP 的简单实现案例
面向切片编程AOP
: 将 非核心业务 封装起来,供 核心业务 调用,从而 减少系统的重复代码,降低模块间的 耦合度。- Spring AOP 是基于 动态代理 实现的。
- 切面 (Aspect) -
@Aspect
:是一个类,包含 切入点 和 通知。- 切入点 (Pointcut) -
@Pointcut
: 实际 被增强的方法,称为 切入点。- 通知 (Advice) -
befor、after
: 实现需要添加的 非核心逻辑。
AOP - Spring AOP 应用场景?
AOP 本质是 动态的 对方法 增强,优雅的实现 横向扩展。
记录日志
权限控制
事务管理
(调用方法前 开启事务, 调用方法后提交 关闭事务)
简单介绍下 Spring 的 事件机制 (事件监听器)?
Spring的事件机制
是一种用于实现 消息传递 的机制。- 当
事件源
产生事件
后,会通过事件广播器
将 事件 发布给所有注册了的事件监听器
。 事件监听器 接收并处理 事件。
二、Spring Boot 基础知识
简单介绍一下 Spring Boot 框架?
Spring Boot
基于 Spring 开发,可以快速创建独立的 Spring 应用程序,而又无需进行复杂的 配置。我认为Spring Boot 的四大 重要特性:
自动配置
:可以 快速集成 大量 第三方工具,无需进行 XML 配置。内嵌容器
: 内置 Tomcat 容器。控制反转
(IOC):由 Spring Ioc容器 管理 对象 的 生命周期 (此时称为 Bean)。面向切面
(AOP)
Spring Boot 自动配置原理?
- 启动 Spring Boot 项目的时候,
@EnableAutoConfiguration
注解开启 自动配置。- 然后 Spring Boot 会加载
spring.factories文件
。spring.factories
文件 列出了所有 自动配置类 的 全限定名。Spring Boot 在 启动时 会根据pom.xml
中的引用 加载相应的配置类 并进行 自动装配。
注:
spring.factories
文件 中也包括Spring Boot Starter
的 全限定名。
Spring Boot Starter 的作用?
Spring Boot Starter
包含了一组相关的 库、依赖 和 配置,用于 启动和配置 特定的 功能。- 主要用于 启动和配置 Spring 的 核心模块 的功能,比如:
spring-core
、spring-beans
、spring-aop
、spring-web
、spring-webmvc
等。
Spring Boot 核心配置文件是什么?
Spring Boot 提供了两种常用的配置文件:
properties文件
YAML文件
优先级:Properties文件 > YAML文件
YAML 配置的优势在哪里 ?
- 1.减少了重复的前缀, 方便阅读
- 2.支持数组
三、Spring Boot 事务
Spring Boot 中怎么使用 事务?
Spring Boot 中 实现事务 的方式主要有两种:声明式事务 和 编程式事务:
声明式事务
:建立在 AOP 之上的,其本质是 对方法进行拦截,然后在 目标方法 前后加入 事务操作。【使用@Transactional
注解】编程式事务
:在代码中 显式 地 声明事务。
Spring Boot 中事务什么情况下会失效?
Spring Boot 事务 基于 AOP 实现,因此会为 目标类 创建 代理类:
方法被 protected 和 private 修饰
:其他包无法访问这个方法,会导致 事务失效。方法被 final 修饰
:子类 无法 重写 该方法,会导致 事务失效。方法内部调用
:因为这种调用方法没有提供 代理对象,则无法获取Bean,会导致 事务失效。类没有被 Spring Ioc 管理
:若该类没有被 Spring Ioc 管理,则无法获取Bean,会导致 事务失效。
四、其他
(了解) 如何保证 接口 的幂等性?
使用 HTTP 方法
:GET 方法 都是 幂等的,而 POST、PUT、DELETE 不是。缓存请求结果
:缓存 接口的 请求结果,当 同一请求 再次到达 服务器 时,可以直接返回之前 缓存的结果。
【需要使用 唯一的标识符 (如 UUID) 对请求进行 标记】
十、Spring Cloud 基础知识
微服务基础知识、Spring Cloud基础知识
十一、Mybatis-Plus
什么是 ORM 框架?
- ORM 框架:实现了 程序对象 到 关系数据库数据 的映射。【即:
对象-关系映射
】- ORM 框架 内部封装了 JDBC。
说说什么是 MyBatis?
Mybatis
是⼀个 半ORM框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,而无需关注 加载驱动、创建连接 等繁杂的过程。
Mybatis-Plus 相比 Mybatis 的优点?
MyBatis-Plus 是一个 MyBatis 的增强工具,简化开发、提高效率 。有如下优点:
简化代码
:MyBatis-Plus 内置 通用Mappe、Service,通过 少量代码 即可实现常规 CRUD操作。动态 SQL
(语句不是固定的, 有 Boolean 类型参数 决定是否使用 当前条件)支持多种数据库
MyBatis 中 #{} 和 ${} 的区别是什么?
#
相当于对数据加上 双引号,$
相当于 直接显示数据。#
可以防止 SQL注入;$
无法防止 SQL注入。- 例如:入侵者 在参数后面添加
1=1
,则${}
所在的 SQL语句 就被 成功侵入。而#{}
会在外面添加 双引号,不会产生影响。
Mybatis-Plus 常用注解有哪些?
@TableName
:映射 数据库表名。@TableId
:设置 主键字段。@TableField
:设置 非主键字段。