Spring4声明式事物

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
//在前面的基础上新增的约束

//Spring基于xml配置声明式事物
//配置事务管理器
<bean id="transactionManager" class="DataSourceTransactionManager"//这里idea会自动联想出全路径>
<property name="dataSource" ref="dataSource"/>
//这里用之前配置好的dataSource标签
</bean>

//配置事物通知
<tx:advice id="txAdvice" transaction-manager="transactionManager">
//配置事物的属性
 <tx:attributes>
  //匹配需要加入事物的方法
  //这里的方法是切入点表达式包含的方法,可以是具体的方法,也可以加*表示模糊的几个方法,也可以直接写*表示所有方法
//只有对增删改才需要开启事务
  <tx:method name="update*" propagation="REQUIRED" />
  <tx:method name="find*" propagation="SUPPORTS" read-only="ture"/>
//isolation:指定事物的隔离级别(默认DEFAULT,指数据库的隔离级别)
//no-rollback-for:是否开启回滚,自定义一个异常,除了这个异常之外所有异常都不回滚,默认所有异常都回滚
//rollback-for:是否开启回滚,自定义一个异常,除了这个异常之外所有异常都回滚,默认所有异常都回滚
//propagation:指定事物的传播行为:是否开启事务以及以什么策略开启(默认REQUIRED,表示一定有事物(在增删改业务场景下使用)),SUPPORTS:如果有事物就使用事物,没有事物就不用事物(查询业务中使用)
//read-only:是否只读,默认为FALSE,在查询业务场景下开启只读
//timeout:设置超时时间,默认-1,表示永不超时,可以以秒为单位进行时间的设置
 </tx:attributes>
</tx:advice>

//配置AOP
<aop:config>
//配置切入点表达式
<aop:pointcut id="pt01" expression="execution(* 包的位置.*.*(..))"/>//这里包的位置是service层的位置,所以对应的方法也是service中的方法,只有在同一个service方法中的操作才会被事物绑定在一起
//配置切入点和事物通知的对应关系
<aop:advisor advice-ref="txAdvice" point-ref="pt01"/>
</aop:config>

//junit提供的@Before:注解在测试类的方法上面,表示所有测试方法执行之前执行这个方法,与前置通知区别一下

//service-dao /dao-jdbcTemplate /jdbcTemplate-dataSource /datasource-数据库信息 /事务管理器-dataSource 
//事物通知-事务管理器 /配置aop

//基于注解的事物(在业务层Service)
@Transactional() //申明在Service实现类上,可以修饰类可以修饰方法,修饰类表示该类所有的方法都会加入事物的支持,如果修饰方法,方法的优先级比类高,这意味着可以同时加这个注解,然后配置不同的属性
@Transactional(propagation=Propagation.REQUIRED,readOnly=false)
//在业务层要加@Service("AccountService")注解
//在Dao层要加@Repository注解

//在xml中开启对注解事物的支持(扫描包+事务管理器+支持)
<context:component-scan base-package="com.ygkj"/>
<bean id="transactionManager" class="DataSourceTransactionManager"//这里idea会自动联想出全路径>
<property name="dataSource" ref="dataSource"/>
//这里用之前配置好的dataSource标签
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
 
//配置jdbcTemplate和dataSource<bean>标签
//在各个层面注入数据

基于SSM框架的网红酒店预定系统,是一个集前台用户操作和后台管理员管理于一体的综合性平台。该系统旨在通过信息化手段,提高酒店预订的效率和用户体验。 系统的主要功能模块包括: 1. **用户管理**:允许用户注册、登录,查看个人信息,以及修改个人资料和密码。 2. **客房管理**:管理员可以添加、删除或修改客房信息,包括房型、价格、设施等。 3. **预订管理**:用户可以浏览可用房型,进行预订操作,管理员则可以管理预订订单,包括确认预订、办理入住和退房等。 4. **退订管理**:用户和管理员都可以处理预订的取消,管理员可以审核退订请求。 5. **系统管理**:管理员可以进行系统设置,包括权限管理、日志查看等。 系统的设计考虑了用户体验和管理员的便捷性,通过SSM框架的灵活性和MySQL数据库的稳定性,实现了数据的高效管理和处理。系统的前端界面友好,操作流程简洁,能够满足用户快速预订和查询的需求。同时,系统的后台管理功能强大,能够为管理员提供全面的数据分析和决策支持。 此外,系统还具有高度的安全性和稳定性,通过角色权限控制,确保了数据的安全性和系统的稳定运行。系统的开发和设计,不仅提升了网红酒店的品牌形象,也为用户带来了便捷的预订体验,进一步推动了酒店行业的信息化发展。
Spring 声明事务是基于 AOP(面向切面编程)实现的。通过在方法级别上定义事务的边界,使得开发者可以将业务代码和事务管理代码分离,使得业务代码更加简洁,同时也方便了事务管理的统一配置和管理。 以下是 Spring 声明事务的基本原理: 1. 开发者在业务代码中定义事务边界,比如在 Service 层的方法上添加 `@Transactional` 注解。 2. Spring AOP 拦截到带有 `@Transactional` 注解的方法,通过事务管理器开启一个事务,并在事务执行结束后提交或回滚事务。 3. 因为事务管理是基于 AOP 实现的,所以事务管理和业务代码分离,通过配置可以对整个应用的事务进行统一管理。 使用 Spring 声明事务的步骤如下: 1. 配置事务管理器,比如使用 Spring 提供的 `DataSourceTransactionManager`。 2. 在业务代码中定义事务边界,比如在 Service 层的方法上添加 `@Transactional` 注解。 3. 在 Spring 配置文件中开启事务管理和 AOP 支持。 比如以下是一个使用 Spring 声明事务的示例: ```java @Service public class UserService { @Autowired private UserDao userDao; @Transactional public void updateUser(User user) { userDao.update(user); } } ``` 在上面的代码中,`@Transactional` 注解用于定义 `updateUser` 方法的事务边界,当 `updateUser` 方法被执行时,Spring AOP 会拦截这个方法,并在事务管理器的支持下开启一个事务,保证 `userDao.update` 方法的执行在一个事务内。如果 `updateUser` 方法执行成功,则事务提交;否则事务回滚。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值