先声明,边学边写,肯定有不对的地方,而且很是笼统,大家帮忙指正,当教程看就不必了
Spring事务:spring 将事务管理进行抽象,具有一致的事务管理,有点如下:
一 spring 事务管理带给我们什么好处
1 为不同的事务API提供一致的编程模型:我的理解是,无论是jdbc,hibernate,jta,均可以按照一定的模型—步骤流程去进行事务处理。
2 提供了比传统事务API更简单,更易用的编程式事务管理API:我的理解,看过之后还真没感觉到编程式事务的使用简单。
3 支持声明式事务管理:我的理解是,根据定义某些AOP,可以对执行数据库操作的函数实现事务关注点的横切。需要进行配置完成。比较不错。
二 事务管理的实现方式。
1 编程方式实现事务管理
A 使用PlatformTransactionManager
这种方式过程如下,根据配置文件得到一个PlatformTransactionManager对象的实现类引用。然后得到一个代表事务的TransactionStatus对象,后面的和使用jdbc事务就差不多了。
B 得到一个PlatformTransactionManager对象后,生成TransactionTemplate的对象实例,再运行它的execute方法即可,不需要显式开启事务,但需要显式会滚。
2 声明式事务管理
A 使用TransactionProxyFactory为目标bean生成事务代理:
过程:定义一个类型为TransactionProxyFactory的bean,依赖注入TransactionManager,用来调用事务;依赖注入要管理的目标对象,以及要加入事务的方法以及事务的级别等参数。
这样在编译文件的时候,aop就会将其织入相应bean的方法代码中,以完成事务管理。
这样的缺点是需要为每一个目标bean指定一个TransactionProxyFactory,很麻烦的。
可以通过定义父模版的方式定义三事物属性相同的模版
B 使用 beanName自动创建代理
使多个bean使用相同的事务代理
使用流程:定义一个事务拦截器,类别为:TransactionInterceptor, 依赖注入TransactionManager,用来调用事务;指定transactionAttribute,以标志那些方法需要进行事务注入,以及事务的级别。
定义一个BeanNameAutoProxyCreator ,指定使用的TransactionInterceptor;指定那些bean需要进行事务注入(方法已经在TransactionInterceptor中指定)
这样就会根据其定义出切点,然后进行横切,完成织入。
C 基于Java5的注释式事务代理配置:
这是通过将事务配置直接写到bean的文件里来实现的(java5的注视功能)