- 编程式事务:
(1)由程序员编程事务控制代码.
(2)OpenSessionInView 编程式事务 - 声明式事务:
(1) 事务控制代码已经由spring 写好。程序员只需要声明出哪些方法需要进行事务控制和如何进行事务控制。 - 声明式事务都是针对于ServiceImpl 类下方法的.
- 事务管理器基于通知(advice)的.
- 在spring 配置文件中配置声明式事务
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- spring-jdbc.jar 中-->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置声明式事务-->
<tx:advice id="txAdvice"transaction-manager="txManager">
<tx:attributes>
<!-- 哪些方法需要有事务控制-->
<!-- 方法以ins 开头事务管理-->
<tx:method name="ins*" />
<tx:method name="del*" />
<tx:method name="upd*" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<aop:config>
<!-- 切点范围设置大一些-->
<aop:pointcut expression="execution(* com.bjsxt.service.impl.*.*(..))" id="mypoint" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="mypoint" />
</aop:config>