Spring-声明事务控制
实质上仍然是AOP思想
xml配置事务增强
以转账为例:
转账方法是切点,事务控制是通知
引入spring-tx:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.17</version>
</dependency>
配置事务增强:
<bean id="accountDao" class="xxx.accountDao">
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
<!--目标对象 内部的方法就是切点-->
<bean id="accountService" class="xxx.accountServiceImpl">
<property name="accountDao" ref="accountDao">
</bean>
<!--配置平台事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--通知 事务的增强-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- * 代表任意方法-->
<!--name:切点方法名称。 isolation:事务的隔离级别。 propagation:事务的传播行为。 timeout:超出时间。 read-only:是否只读。-->
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<!--配置事务的aop织入-->
<aop:config>
<!--声明切片切点-->
<aop:advisor advice-ref="txAdvice" pointcut="execution(* 包名.*.*(..))" />
</aop:config>
注释配置事务增强
@Repository("xxxDao") // dao类
@Service("xxxService") // service类
// 参数和上述xml中的tx:method一致,需要可自行添加
@Transactional() // 使用在需要事务增强的方法上
你还需要配置组件扫描和事务的注解驱动
<!--组件扫描-->
<context:component-scan base-package="包名"/>
<!--配置平台事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--注解驱动-->
<tx:annotation-driven transaction-manager="transactionManager" />
浙公网安备 33010602011771号