Spring
2020-08-06 08:13:48 84 举报
AI智能生成
spring
作者其他创作
大纲/内容
Spring
Spring事务管理
基本概念
Spring事物管理还是依赖于数据库事物,是对数据库事务的包装
数据库事务依赖于Connection
核心实现
TransactionDefinition(定义事务属性)
事物隔离级别
ISOLATION_DEFAULT
PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别
ISOLATION_READ_UNCOMMITTED
事务最低的隔离级别,会产生脏读,不可重复读和幻像读
ISOLATION_READ_COMMITTED
可能会出现不可重复读和幻读
ISOLATION_REPEATABLE_READ
可能出现幻读
ISOLATION_SERIALIZABLE
事务被处理为顺序执行
事物传播行为
PROPAGATION_REQUIRED
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中
PROPAGATION_SUPPORTS
支持当前事务,如果当前没有事务,就以非事务方式执行
PROPAGATION_MANDATORY
使用当前的事务,如果当前没有事务,就抛出异常
PROPAGATION_REQUIRES_NEW
新建事务,如果当前存在事务,把当前事务挂起
PROPAGATION_NOT_SUPPORTED
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
PROPAGATION_NEVER
以非事务方式执行,如果当前存在事务,则抛出异常
PROPAGATION_NESTED
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作
事物超时时间
......
TransactionStatus(事务处理过程中的状态)
PlatformTransactionManager(接口)
整个抽象体系基于策略模式实现
继承体系来看,实现依赖于模板方法模式
子主题
AbstractPlatformTransactionManager(抽象类)
DataSourceTransactionManager
HibernateTransactionManager
JPA、JTA数据源事务处理支持
TransactionProxyFactoryBean
生成proxy代理对象
TransactionInterceptor
完成对代理方法的拦截,将事务处理的功能编织到拦截的方法中
TransactionAttributeSourceAdvisor
读取ioc容器事务配置属性,转化为spring事务处理需要的内部数据结构
管理方式
编程式事务管理
代码里通过Spring API手动控制事务的提交和回滚
声明式事务管理
建立在AOP之上
@Transactional
只能被应用到public方法上
建议是在具体的类(或类的方法)上使用 @Transactional 注解
Spring 的 AOP 的自调用问题
SpringMVC
FrameworkServlet
processRequest
1.取得当前线程的 RequestAttributes
2.创建 RequestAttributes
3.初始化 ContextHolders
4.服务处理,留给子类实现
5. 释放 ContextHolders
DispatcherServlet
doDispatch
1. 判断用户的请求是否为文件上传,通过MultipartResolver解析
2.通过HandlerMapping映射处理器和拦截器包装成一个HandlerExecutionChain
3. 将处理器包装成相应的适配器
4. 执行处理器相关的拦截器的预处理
5. 由适配器执行处理器
6. 拦截器后处理
7. 视图渲染
doService
面试
自己设计一个mvc如何设计
Spring AOP体系
核心概念
横切关注点
一般情况下,切面中封装的方法都是横切关注点。
切面(aspect)
封装各种横切关注点的类,就是切面
连接点(joinpoint)
被拦截到的点,就是spring配置文件中的切入点表达式中需要拦截的所有的方法。
切入点(pointcut)
对joinpoint进行拦截的定义
通知(advice)
指拦截到joinpoint之后所要做的事情(增强的代码)
实现原理
JDK动态代理
InvocationHandler接口
Proxy类
CGLIB动态代理
CGLIB是通过继承的方式做的动态代理
某个类被标记为final,无法使用CGLIB做动态代理的
Spring IOC的体系结构
BeanFactory
Spring Bean的创建是典型的工厂模式
子接口
ListableBeanFactory
ApplicationContext
BeanFactory只对IOC容器的基本行为做了定义
IOC容器实现
XMLBeanFactory类
读取XML文件中定义的BeanDefinition(XML文件中对Bean的描述)
ApplicationContext接口
继承ListableBeanFactory
可以获取多个 Bean
继承 HierarchicalBeanFactory
应用中起多个 BeanFactory,可以将各个 BeanFactory 设置为父子关系
AutowireCapableBeanFactory
组合
附加功能
支持信息源,可以实现国际化
实现MessageSource接口
访问资源
实现ResourcePatternResolver接口
支持应用事件
实现ApplicationEventPublisher接口
IOC容器初始化
Bean的resource定位、载入和注册三个过程
基本步骤
初始化入口是容器实现中的refresh()方法完成
Bean的定义载入是容器实现中的loadBeanDefinition()方法
BeanDefinitionRegistry接口提供了向容器手工注册BeanDefinition 对象的方法
BeanDefinition
Bean在Spring容器中是以BeanDefinition描述
Bean的解析:对Spring配置文件的解析
高级特性
BeanPostProcessor后置处理
autowiring自动装配
lazy-init属性bean的预初始化
Bean生命周期
设计模式
工厂模式
工厂方法模式
单例模式
Bean默认单例
Spring 通过 ConcurrentHashMap 实现单例注册表的特殊方式实现单例模式
观察者模式
Spring 事件驱动模型
适配器模式(Adapter Pattern)
Spring AOP 的增强或通知(Advice)使用到了适配器模式
模板方法模式
Bean作用域
singleton(单实例)
prototype(多实例,通常这样的Bean有状态)
循环依赖
构造注入解决循环依赖
setter注入解决循环依赖
文章
自己实现
分析
配置解析、对象创建和对象生命周期管理
实现和设计思路
1.提供执行入口
2.配置文件解析
3.核心工厂类设计
SpringBoot
源代码
启动流程
自动化配置原理
spring bean的生命周期
0 条评论
回复 删除
下一页