Spring Framework
2023-06-09 14:34:36 0 举报
AI智能生成
Spring
作者其他创作
大纲/内容
⭐ IoC/ DI
基本特点
最小化应用程序中的代码量
以最小的影响和最少的侵入机制促进松耦合
支持即时的实例化和延迟加载 Bean 对象
易于测试:不需要测试用例中任何单例或 JNDI 查找机制
基本用法
注解配置
类型类
Web 类
设置类
@Conditional
@EnableConfigurationProperties、@ConfigurationProperties
@Autowired
功能类
@Import
@ComponentScan
容器扩展
处理 Bean 定义:BeanFactoryPostProcessor
处理 Bean 实例:BeanPostProcessor
ApplicationContextAware
......
Bean 管理
依赖注入
构造器注入
Setter 注入
Bean 关系
作用域
singleton
prototype
request
session
global session
application
websocket
IoC 容器
容器类型
BeanFactory
ApplicationContext
* 父子容器
属性配置
属性编辑器
外部属性文件
核心接口
Resource:资源抽象接口,提供多个实现类表示多种途径获取资源的抽象
ResourceLoader:对传入的资源地址信息选择底层资源实现类
BeanDefinition:配置文件 <bean> 元素在容器内部的表示
InstantiationStrategy:根据 BeanDefinition 对象创建 Bean 实例
BeanWrapper:对 Bean 包装的代理,完成对已实例化的 Bean 的属性填充工作
BeanFactory:根据 BeanDefinition 创建具体 Bean 对象
FactoryBean:工厂方法返回实际的 Bean 对象
工作机制
容器启动
容器启动
准备刷新
创建 BeanFactory 对象
BeanFactory 准备
引入后处理器扩展能力
执行注册的后处理器
注册 Bean 的后处理器
处理 BeanFactory 的后处理器
初始化消息源
初始化应用事件广播器
BeanFactory 子类扩展实现
注册事件到应用事件广播器、发送通知
完成初始化后的刷新工作
重置公共缓存
资源加载
加载 ConfigurationMetaData
解析 Resource
注册 BeanDefinition
Bean 生命周期
Bean 实例化
实例化
实例化前后调用后处理器
实例化
依赖注入
属性设置
设置属性
BeanNameAware
BeanFactoryAware
初始化
自定义 init 方法
InitializingBean
初始化前后调用后处理器
ApplicationContextAware
(使用)
(销毁)
DisposableBean
自定义 destory 方法
BeanFactory
ApplicationContext
解决循环依赖
事件机制
事件体系
事件和事件源
广播器
监听器和注册表
标准事件
自定义事件
应用须知
在合适的时机发布
事件监听器
⭐ AOP
核心概念
JoinPoint:程序执行的位置
PointCut:定位连接点的条件
Advice:通知 / 增强
Target:增强逻辑织入的目标类
Introduction:引介时的特殊的增强,为类添加属性和方法
Weaving:织入
Proxy:被 AOP 织入增强后产生的结果类,融合了原类和增强逻辑
Aspect:切面 = 切点 + 增强
实现方式
动态代理
JDK 动态代理
CGLIB 动态代理
静态代理
类加载时编织(LTW)
自动代理
BeanNameAutoProxyProxyCreator
DefaultAdvisorAutoProxyCreator
@AspectJ
基本语法
定义切面
切点函数
增强类型
实现规则
增强织入的顺序
访问连接点信息
参数绑定
Schema
LTW
Data Access
Spring Data
Spring Data Rest
Web
Web MVC
基本使用
1. 引入 Maven 依赖
2. 实现 Controller
3. 实现 JSP 页面
4. 配置 Spring MVC
5. 部署 DispatcherServlet
交互流程
核心组件
过滤器与拦截器
常用注解
注册模型属性:@ModelAttribute
读取请求头:@RequestHeader
读取 Cookie:@CookieValue
校验参数:@Valid、@Validated
注解处理:@ExceptionHandler
异常处理:@ControllerAdvice
视图应用
模板引擎
类别
Thymeleaf
Velocity
Freemarker
JSP
资源定位
渲染上下文
模板引擎
Spring 整合
内容协商
视图解析器:ContentNegotiatingViewResolver
策略管理器:ContentNegotiationConfigurer
配置策略
配置 Bean
配置对象
Bean:ContentNegotiationManager
FactoryBean:ContentNegotiationManagerFactoryBean
策略实现:ContentNegotiationStrategy
MediaType:FixedContentNegotiationStrategy
“Accept” 请求头:HeaderContentNegotiationStrategy
请求参数:ParameterContentNegotiationStrategy
路径扩展名:PathExtensionContentNegotiationStrategy
处理流程
配置策略
1. 内容协商配置器关联管理 FactoryBean
2. 配置器配置策略
3. 添加配置的策略到 FactoryBean
4. FactoryBean 创建内容协商管理器
5. 内容协商管理器关联内容协商视图解析器
6. 内容协商视图解析器关联对应的视图解析器 Bean
处理请求
1. DispatcherServlet 处理客户端请求
2. DispatherServlet 调用内容协商视图解析器
3. 内容协商视图解析器匹配策略解析视图
4. 返回请求结果
多视图处理
REST 应用
架构约束
统一接口
C/S 架构
无状态
可缓存
* 分层系统
* 按需代码
基本体现
通信协议:HTTP
资源识别:URI
数据格式:JSON
资源操作:GET、POST、PUT、DELETE
调用状态描述:HTTP 状态码
自描述信息
Content-Type
MIME-Type
Media-Type
......
超媒体
Spring 支持
注解驱动
内容协商
处理流程
核心组件
基本使用
自定义
消息转换器
参数分解器
返回值处理器
资源跨域
注解驱动
代码驱动
服务发现
Web Flux
Web Socket
Transactional
基本特点
声明式事务
编程式事务
事务类型
本地事务
外部事务
XA 规范
事务管理接口
事务执行类/ 方法:@Transactional
事务管理器:PlatformTransactionManager
DataSourceTransactionManager
JpaTransactionManager
JmsTransactionManager
JtaTransactionManager
......
事务定义:TransactionDefinition
隔离级别
未提交读
已提交读
可重复读
可串行化
传播级别
REQUIRED:如当前上下文存在事务,则加入该事务,否则创建事务(默认值)
SUPPORTS:如当前上下文存在事务则加入该事务,否则非事务执行
MANDATORY:如当前上下文中存在事务则加入该事务,否则抛出异常
REQUIRES_NEW:每次都新建事务,同时将上下文中的事务挂起,新事务执行完成后再恢复上下文事务
NOT_SUPPORTED:如果当前上下文中存在事务则挂起,新的方法非事务执行
NEVER:如果当前上下文中存在事务则抛出异常,否则非事务执行
NESTED:如果当前上下文中存在事务则嵌套事务执行,否则新建事务
超时属性:如果超过该时间限制但事务还没有完成,则自动回滚事务。
只读属性
事务资源:被事务管理的资源,比如数据源、JMS 资源,以及自定义的事务性资源等等。
回滚规则
事务状态:TransactionStatus
手动管理事务 TransactionTemplate
常见问题
事务不生效
方法声明为非 public
方法定义为 final
方法内部调用
方法未被 Spring 管理
多线程调用
库、表不支持事务
Spring 配置中未开启事务
事务回滚失败
传播级别设置不正确
手动处理异常/抛出其它异常
0 条评论
下一页