- 浏览: 6352156 次
- 性别:
- 来自: 一片神奇的土地
文章分类
- 全部博客 (745)
- JQuery (25)
- JS (33)
- 数据库 (59)
- Java基础 (56)
- JSON (8)
- XML (8)
- ireport (7)
- 设计模式 (10)
- 心情 (14)
- freemarker (1)
- 问题 (15)
- powerdesigner (2)
- CSS (15)
- DWR (4)
- tomcat (16)
- Hibernate (12)
- Oracle (7)
- Struts (7)
- Spring (34)
- JSP (23)
- 需学习 (64)
- 工具类库 (63)
- Maven (14)
- 笔试题 (34)
- 源码学习 (31)
- 多线程 (39)
- Android (32)
- 缓存 (20)
- SpringMVC (14)
- jQueryEasyUi (12)
- webservice-RPC (13)
- ant (1)
- ASP.NET (10)
- 正则表达式 (3)
- Linux (15)
- JBoss (1)
- EJB (3)
- UML (2)
- JMS (3)
- Flex (8)
- JSTL (2)
- 批处理 (5)
- JVM (16)
- 【工具】 (16)
- 数据结构 (29)
- HTTP/TCP/Socket (18)
- 微信 (1)
- tomcat源码学习 (15)
- Python (30)
- 主机 (2)
- 设计与架构 (19)
- thrift-RPC (2)
- nginx (6)
- 微信小程序 (0)
- 分布式+集群 (12)
- IO (1)
- 消息队列 (4)
- 存储过程 (8)
- redis (9)
- zookeeper (5)
- 海量数据 (5)
最新评论
-
360pluse:
技术更新,战术升级!Python爬虫案例实战从零开始一站通网盘 ...
Python爬虫实战:Scrapy豆瓣电影爬取 -
18335864773:
推荐用 pageoffice 组件生成 word 文件。
JAVA生成WORD工具类 -
jjhe369:
LISTD_ONE 写道起始地址为163.135.0.1 结束 ...
IP地址与CIDR -
baojunhu99:
private final int POOL_SIZE = 5 ...
使用CompletionService获取多线程返回值 -
LovingBaby:
胡说,javascript 运行时是单线程的,event lo ...
Ajax请求是否可以实现同步
spring对声明式事务是通过它的AOP框架实现的。要在spring中使用声明式事务,需用到TransactionProxyFactoryBean,它类似于ProxyFactoryBean,不过其目的是将方法包装在事务上下文中。
可以创建自己的ProxyFactoryBean来处理事务,也能达到同样的效果,但TransactionProxyFactoryBean是专门为声明式事务设计的,用它会简单些。
网上的一个例子:
<bean id="testAction" class="test.action.Stuts2ActionTest"> <property name="service" ref="templatesService"></property> </bean> <bean id="templatesService" class="test.service.impl.TaoTemplatesServiceImpl"> <property name="dao" ref="templatesDAO" /> </bean>
主要地方:
<!-- 定义DAO bean的事务代理--> <bean id="templatesDAO" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean "> <!-- 为事务代理bean注入事务管理器--> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <!-- 设置事务属性--> <property name="transactionAttributes"> <props> <!-- 所有以add开头的方法,采用required的事务策略,并且只读--> <prop key="add*">PROPAGATION_REQUIRED</prop> <!-- 所有以mod开头的方法,采用required的事务策略,并且只读--> <prop key="mod*">PROPAGATION_REQUIRED</prop> <!-- 所有以del开头的方法,采用required的事务策略,并且只读--> <prop key="del*">PROPAGATION_REQUIRED</prop> <!-- 其他方法,采用required的事务策略 --> <prop key="*">readOnly</prop> </props> </property> <!-- 为事务代理bean设置目标bean --> <property name="target"> <!-- 采用嵌套bean配置目标bean--> <bean class="test.dao.impl.TaoTemplatesDAOImpl"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> </property> </bean>
<!-- 定义事务管理器,使用适用于Hibernte的事务管理器--> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <!-- HibernateTransactionManager bean需要依赖注入一个SessionFactory bean的引用--> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean>
<!--定义数据源--> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <!-- 定义数据库驱动--> <property name="driverClassName"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <!-- 定义数据库url--> <property name="url"> <value>jdbc:oracle:thin:@192.168.1.96:1521:yxdb</value> </property> <!-- 定义数据库用户名--> <property name="username"> <value>yxuser</value> </property> <!-- 定义数据库密码--> <property name="password"> <value>yxuser</value> </property> </bean> <!--定义一个hibernate的SessionFactory--> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!-- 定义SessionFactory必须注入DataSource--> <property name="dataSource"> <ref local="dataSource" /> </property> <property name="mappingResources"> <list> <!--以下用来列出所有的PO映射文件--> <value>test/mapping/Tao_Templates.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.Oracle10gDialect </prop> <prop key="hibernate.show_sql">true</prop> <!--此处用来定义hibernate的SessionFactory的属性: 不同数据库连接,启动时选择create,update,create-drop --> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean>
《Spring IN Action》例子:
<bean id="courseServiceTarget" class="com.test.CourseServiceImpl"> </bean>
当Service比较多时,这种方式XML比较庞大,有以下两种解决方式:
1、Bean继承
2、AOP自动代理
Bean继承:
<bean id="abstractTxDefinition" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean " lazy-init="true"> <property name="transactionManager"> <ref bean="transactionManager"> </property> <property name="transactionAttributeSource"> <ref bean="attributeSource"> </property> </bean>
<bean id="courseService" parent="abstractTxDefinition"> <property name="target"> <bean class="com.test.CourceServiceImpl"> </property> </bean> //将另一个bean事务化 <bean id="studentService" parent="abstractTxDefinition"> <property name="target"> <bean class="com.test.StudentServiceImpl"> </property> </bean>
AOP自动代理:
http://uule.iteye.com/admin/blogs/894055
发表评论
-
Spring 配置多数据源实现数据库读写分离
2014-10-09 11:05 58220现在大型的电子商务 ... -
strust_spring_hibernate的优缺点
2014-10-08 09:41 2754struts框架具有组件的模块化,灵活性和重用性的优点,同时 ... -
声明式事务
2014-09-03 17:53 1775跟开涛学Spring 数据库事务 本 ... -
@Component注解
2014-08-20 15:43 37826Spring自带的@Component注 ... -
日志记录、性能监控的三种实现方式
2014-08-18 14:09 7627一、需解决的问题 部分API有签名参数(signatur ... -
BeanWrapper 设置和获取属性值
2014-08-18 11:10 96865.4. Bean处理和BeanWrapper - Spr ... -
SpringMVC的拦截器Interceptor
2014-08-15 10:23 5073跟开涛学SpringMVC 接口: Ha ... -
AOP
2014-08-14 17:00 10741跟开涛学Spring 问题: 使用BeanFac ... -
Bean作用域
2014-08-14 15:16 1797跟开涛学Spring 附:单例模式的DoubleChec ... -
DI
2014-08-14 10:26 1787跟开涛学Spring DI: ... -
IOC + 容器
2014-08-13 18:03 2910跟开涛学Spring 传统应用程序示意图 ... -
Spring中Bean初始化实例【重要】
2014-07-21 16:48 61235可参考文章: Spring Bean 生命周期 Spr ... -
bean的生命周期
2014-07-21 15:41 1522在spring中,从BeanFactory或Applica ... -
Spring中BeanPostProcessor
2014-07-21 15:19 50686Spring提供了很多扩展 ... -
context,listener,filter,servlet加载顺序
2014-04-22 14:08 8071web.xml加载过程(步骤):1.启动WEB项目的时候, ... -
Spring+hibernate的session问题
2013-09-27 10:20 3188在spring框架和hibernate框架集成的时候,根据 ... -
HttpServletRequestWrapper 用法
2013-09-25 16:50 8495HttpServletRequestWrapper ... -
AOP
2012-05-09 10:14 1621引子: AOP(面向方面 ... -
IOC
2012-05-09 10:11 1593引述:IoC(控制反转:I ... -
事务隔离级别
2012-03-08 11:39 10502模拟数据库的四种隔离级别1 模拟数据库的四种隔离级 ...
相关推荐
在 Spring 中,声明式事务处理可以通过配置 TransactionProxyFactoryBean 来实现。TransactionProxyFactoryBean 是一个 FactoryBean,它可以创建一个代理对象,该代理对象可以拦截业务方法的调用,并对事务进行管理...
总的来说,Spring的TransactionProxyFactoryBean是声明式事务管理的一种高效实现方式,它通过代理对象实现了事务策略与业务逻辑的解耦,使我们的代码更加简洁和易于维护。通过深入理解和灵活运用,我们可以更好地...
### 标题解读:Spring声明式事务配置 Spring框架提供了两种主要类型的事务管理方式:编程式事务管理和声明式事务管理。声明式事务管理通过XML配置或注解的形式定义事务边界,使得业务逻辑与事务控制分离。 ### ...
总结来说,本例子通过`TransactionProxyFactoryBean`和`@Transactional`展示了如何在Spring中实现声明式事务管理,这两种方式都利用了AOP来封装事务逻辑,使代码更加整洁,降低了事务管理的复杂性。在实际应用中,...
总结一下,本示例展示了如何使用Spring的`TransactionProxyFactoryBean`来实现声明式事务管理。通过配置事务代理,我们可以将事务控制逻辑与业务代码解耦,提高代码的可维护性和可复用性。在实际开发中,这种模式...
首先,Spring声明式事务管理主要依赖于AOP(面向切面编程)实现。通过在配置文件中定义事务的规则,Spring可以在特定的方法执行前后自动地进行事务的开启、提交、回滚等操作。 在提供的代码示例中,可以看到一个...
在"声明式事务控制,spring2.5+hibernate3集成源码"中,开发者可以学习如何配置Spring的事务管理器,以及如何在Hibernate的SessionFactory和SessionFactoryBuilder上使用Spring的TransactionProxyFactoryBean来创建...
除了使用 XML 配置外,还可以通过继承特定的基类来实现声明式事务管理。这种方式更简洁,适合于多个具有相似事务属性的服务类。 ```xml class="org.springframework.transaction.interceptor....
总结一下,Spring基于AOP实现的事务管理通过TransactionProxyFactoryBean,结合声明式事务配置,能够提供一种高效且易于维护的事务解决方案。它允许我们在不修改业务逻辑的情况下,统一管理和控制事务,提升了代码的...
在Spring框架中,声明式事务管理是通过AOP(面向切面编程)实现的,它允许开发者无需在业务代码中显式处理事务,而是通过配置来控制事务的边界。Spring提供了四种不同的方式来配置声明式事务,这使得事务管理更加...
* 基于TransactionInterceptor的声明式事务:Spring声明式事务的基础,通常也不建议使用这种方式。 * 基于TransactionProxyFactoryBean的声明式事务:第一种方式的改进版本,简化了配置文件的书写。 * 基于和命名...
Spring通过AOP实现声明式事务管理。通常通过TransactionProxyFactoryBean设置Spring事务代理。
本文将深入探讨如何在Spring框架中使用`TransactionProxyFactoryBean`来实现声明式事务代理配置。 #### 声明式事务管理概述 声明式事务管理通过在配置文件或注解中定义事务边界,而不是在业务代码中显式地管理事务...
首先,Spring事务管理有两种主要模式:编程式事务管理和声明式事务管理。编程式事务管理通过调用`PlatformTransactionManager`接口提供的方法进行显式控制,如`beginTransaction()`, `commit()`, 和`rollback()`。...
Spring事务管理创造性的解决了很多以前要用重量级的应用服务器才能解决的事务问题,那么其实现原理一定很深奥吧?可是如果读者仔细研究了Spring事务管理的代码以后就会发现,事务管理其实也是如此简单的事情。这也...
* 声明式事务管理: * 基于TransactionProxyFactoryBean的方式.(很少使用) * 需要为每个进行事务管理的类,配置一个TransactionProxyFactoryBean进行增强. * 基于AspectJ的XML方式.(经常使用) * 一旦配置好之后,...
本文将深入探讨Spring声明式事务管理的原理和配置。 首先,理解声明式事务管理的核心概念。声明式事务管理是基于Spring的AOP(面向切面编程)实现的,它会在目标方法执行前后自动插入事务控制逻辑。这意味着,我们...
首先,Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理。编程式事务管理通过调用`PlatformTransactionManager`接口的`beginTransaction()`、`commit()`和`rollback()`方法来手动控制事务的开始、提交...
一般来说,声明式事务管理由于其简洁和低侵入性,是大部分Spring应用的首选。而编程式事务管理则在需要更细粒度控制或与其他框架集成时更为合适。了解这些配置方式,可以帮助你更灵活地在Spring应用中实现事务管理。