https://juejin.cn/post/6968384376824561671
系统应用开发过程中通常需要使用事务来保证业务数据的一致性,实现方式如:开启事务、执行数据库写操作、提交或者回滚事务,这种标准实现方式适用于少量一致性业务,如果存在大量需要保证数据一致性的业务,不仅会让开发人员重复编码,还会给系统造成冗余代码。基于这些问题,伟大的Spring
框架为我们提供了@Transactional
注解,那么它是如何使用一个注解就解决了我们的烦恼呢?我们该如何着手进行分析呢?
SpringBoot
集成的功能往往要从一个xxxAutoConfiguration
开始说起
打开TransactionAutoConfiguration
自动配置类可以看到一个比较重要的注解@EnableTransactionManagement
用于开启事务管理功能,@EnableTransactionManagement
注解又导入了AutoProxyRegistrar
和ProxyTransactionManagementConfiguration
ProxyTransactionManagementConfiguration
中声明了一个切面BeanFactoryTransactionAttributeSourceAdvisor
,看到切面必定会有相对应的切点TransactionAttributeSourcePointcut
(用于声明切入的范围)和通知TransactionInterceptor
(用于实现切入目标的后续操作)。
@Transactional
注解处理器@Bean
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public TransactionAttributeSource transactionAttributeSource() {
return new AnnotationTransactionAttributeSource();
}
AnnotationTransactionAttributeSource
实例化指定了注解解析器为SpringTransactionAnnotationParser
可以看到该解析器主要用来处理@Transactional
注解