6Mybatis和Spring集成原理剖析
Spring启动扩展点
Spring如何做到与Dubbo,Mybatis等无缝集成?
集成Spring框架
- 扩展点
InitializingBean
1 | public class User implements InitializingBean, BeanNameAware { |
输出结果:
user ctor
set BeanName:user
user PostConstruct
user initializingBean afterPropertiesSet
user init
Aware
- ApplicatinoContextAware
- BeanNameAware
- ApplicationEventPublisherAware
FactoryBean
- 复杂对象创建
- 对象以来Spring生命周期某个时间点(和生命周期其他扩展接口一起使用)
ApplicationListener
Spring框架事件处理核心类
MyBatis-Spring集成过程
SqlSessionFactoryBean类结构
MapperFactoryBean
SqlSessionDaoSupport
SqlSessionTemplate线程安全
线程不安全导致的问题?
SqlSession包含一个独立数据库连接Connection对象线程不安全,多线程共享SqlSession可能导致数据混乱,事务冲突。SqlSession还包含一级缓存,多线程共享可能导致数据不一致(A线程插入数据中途,B线程查询结果并缓存)。
Mybatis 的 SqlSession线程不安全,Spring集成如何保证安全?
SqlSessionDaoSupport类 构建了一个SqlSession 的代理对象。SqlSessionDaoSupport类 包含SqlSessionTemplate对象,SqlSessionTemplate对象包含SqlSession的代理对象,创建代理对象时将其放在ThreadLocal中,保证线程安全。
SqlSessionTemplate的定位
SqlSessionTemplate初始化
动态代理
SqlSessionHolder
TransactionSynchronizationManager
Spring 事件有哪些,如何扩展?