- 浏览: 495139 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
来这里学java:
...
实战篇:设计自己的Annotation -
yushui2000:
突然想到一种方法,就是1、2、2、3、4、5作为5个球(类似彩 ...
一道算法题目,值得一看 -
wst0350:
理解力
实战篇:设计自己的Annotation -
yingzhor:
楼下的,你看看代码不就知道怎么验证了吗?这不是放在sessio ...
利用servlet生成简单的验证码 -
ming_7755:
妙用Commons良药<三>
常常在项目开发时候,很多目标bean需要生成事务代理,当然可以为每一个目标bean配置一个
TransactionProxyFactoryBean bean啦。这样做的话,可能最后变成配置地狱,此时可以考虑使用自动事务代理。
根据spring的BeanName来管理自动代理可以这样做:
下面再看一种也是常用的使用bean继承简化事务代理配置
使用继承的方法,其配置文件是增量式的,不如采用上面所说的第一种方法简捷,精炼。
很晚了,突然想写博客,就上来写了这一篇很短的文章吧.
嗯,累了,过一会儿睡觉去....
TransactionProxyFactoryBean bean啦。这样做的话,可能最后变成配置地狱,此时可以考虑使用自动事务代理。
根据spring的BeanName来管理自动代理可以这样做:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/myuser</value> </property> <property name="username"> <value>lighter</value> </property> <property name="password"> <value>12345</value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <prop key="hibernate.show_sql">true</prop> </props> </property> <property name="mappingResources"> <list> <value>org/mmc/dao/domain/User.hbm.xml</value> </list> </property> </bean> <!-- 配置Hibernate的事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 定义事务拦截器bean --> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager" ref="transactionManager" /> <property name="transactionAttributes"> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <!-- 定义BeanNameAutoProxyCreator--> <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <!-- 所有名字以DAO,Service结尾的bean,将由该"bean后处理器"为其创建事务代理;实际上应该在业务层进行事务管理,这里只是举一个简单例子 --> <value>*DAO,*Service</value> </property> <!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器--> <property name="interceptorNames"> <list> <!-- 可以增加其他的拦截器 --> <value>transactionInterceptor</value> </list> </property> </bean> <!-- 举下面这一个例子:这时候,这一个bean已经有了事务管理,可以增加类似的bean --> <bean id="searchUserDAO" class="org.mmc.dao.impl.SearchUserDAO"> <property name="sessionFactory" ref="sessionFactory" /> </bean> </beans>
下面再看一种也是常用的使用bean继承简化事务代理配置
<bean id="test1" class="test.TransactionTestImpl"> <property name="ds"><ref local="dataSource"/></property> </bean> <bean id="test2" class="test.TestImpl"> <property name="ds"><ref local="dataSource"/></property> </bean> <bean id="baseTxProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"> <property name="transactionManager"><ref bean="transactionManager"/></property> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <bean id="testTrans1" parent="baseTxProxy"> <property name="target"> <ref local="test1"/> </property> </bean> <bean id="testTrans2" parent="baseTxProxy"> <property name="target"> <ref local="test2"/> </property> </bean>
使用继承的方法,其配置文件是增量式的,不如采用上面所说的第一种方法简捷,精炼。
很晚了,突然想写博客,就上来写了这一篇很短的文章吧.
嗯,累了,过一会儿睡觉去....
评论
4 楼
fangang
2007-02-02
好方法,可以试试
3 楼
blackstreet
2007-02-02
我用普通的没问题,一个DAO对应 一个udsStaffDAOProxy。用上面第一种就报错,
org.springframework.beans.factory.BeanCreationException: Error creating bean with name '/login' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyAccessExceptionsException: PropertyAccessExceptionsException (1 errors); nested propertyAccessExceptions are: [org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy1] to required type [com.oa.DAO.UdsStaffDAO] for property 'udsStaffDAO']
这是我的代码
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</property>
<property name="url">
<value>jdbc:microsoft:sqlserver://127.0.0.1:1433</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value></value>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"></ref>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/oa/hibernate/UdsStaff.hbm.xml</value>
</list>
</property>
</bean>
<!-- 配置Hibernate的事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 定义事务拦截器bean -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>*DAO</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<!--用户信息的DAO-->
<bean id="UdsStaffDAO" class="com.oa.DAO.UdsStaffDAO" >
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean>
org.springframework.beans.factory.BeanCreationException: Error creating bean with name '/login' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyAccessExceptionsException: PropertyAccessExceptionsException (1 errors); nested propertyAccessExceptions are: [org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy1] to required type [com.oa.DAO.UdsStaffDAO] for property 'udsStaffDAO']
这是我的代码
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</property>
<property name="url">
<value>jdbc:microsoft:sqlserver://127.0.0.1:1433</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value></value>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"></ref>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/oa/hibernate/UdsStaff.hbm.xml</value>
</list>
</property>
</bean>
<!-- 配置Hibernate的事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 定义事务拦截器bean -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>*DAO</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<!--用户信息的DAO-->
<bean id="UdsStaffDAO" class="com.oa.DAO.UdsStaffDAO" >
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean>
2 楼
wdl123
2007-01-24
这个方法不错,如果BEAN很多的情况,上述方法和用parent继承哪个性能比较好?
1 楼
justcode
2007-01-22
对的,这种方法是挺好的解决了一些问题.
发表评论
-
TestNG系列2:TestNG初接触
2008-04-18 22:52 3512首先来看一个非常简单 ... -
TestNG系列1:TestNG简介及插件
2008-04-18 22:19 6339一、什么是TestNG 引用TestNG是根据JUnit 和 ... -
用jdbcTempate调用存储过程,处理BLOB/CLOB小记
2007-11-06 00:20 90351、利用spring的jdbcTemplate调用存储过程 假 ... -
怎样利用spring简单地发送邮件
2007-11-03 16:45 3787SMTP:简单邮件传输协议,用于发送电子邮件的传输协议. PO ... -
搜索篇:Struts、Lucene的Web实例
2007-01-15 23:10 7922代码是网上下载的,有兴趣的可以看一下 这里用到的Lucene是 ... -
Stripes 快速入门指南[翻译]
2006-12-27 18:56 10437说明:这是Stripes文档中的一篇叫Quick Start ... -
搜索篇:lucene简单实例<二>
2006-12-20 23:09 10702写文章的时候,感觉比较难写的就是标题,有时候不知道起什么名字好 ... -
搜索篇:lucene简单实例<二>
2006-12-20 23:00 123写文章的时候,感觉比较难写的就是标题,有时候不知道起什么名字好 ... -
搜索篇:lucene的简单实例<一>
2006-12-19 20:12 13410说明一下,这一篇文章的用到的lucene,是用2.0版本的,主 ... -
一个比较完整的ANT实例
2006-12-19 19:41 8346Ant是一种专为java量身订做的构建工具,基础已经了java ... -
对struts2的的一些不满
2006-11-12 01:06 2970个人对struts2的一些不满的地方 1、基本大部分全抄web ... -
从webwork2.2.4迁移到struts2
2006-11-12 00:47 2574注:(originally posted on the Web ... -
webwork2.2到struts2的变化
2006-11-12 00:44 2177While Struts 2 started with the ... -
反思spring:由Ruby on Rails想到的
2006-10-23 09:33 3226[size=11] 众所周知,RoR里面的指导原则有: 第 ... -
关于jboss,weblogic的配置
2006-05-26 22:28 3445###################以下是jboss的配置# ... -
[转载] 无所不能的“蚂蚁”--Ant
2006-06-05 23:27 3808说他无所不能,好像有点夸张,但是用过Ant之后,感觉真的是只有 ... -
Hibernate, Java 5 and DAO[转]
2006-08-04 17:54 2457... -
研究一下springside的核心部分源代码
2006-09-15 19:47 6963这两天,有一些时间,研究一下springside的源代码,结 ...
相关推荐
spring bean配置 运行环境:eclipse 构建工具:maven 不提供maven构建,maven用来解决jar包的依赖
Spring,Bean调用,事务,AOP,配置详细说明 提升开发效率
测试spring事务管理 搭建了ssh框架的web工程 本工程用到的数据库表很简单 user(id, name) 可自行创建 本例所有的事务放在service层进行管理,方法中间抛出运行时异常以测试是否回滚 Spring配置文件中关于事务...
SPRING:bean配置properties
创建SpringBean配置工具类(安全)如: <bean id=... scope="prototype"></bean>
Spring bean 管理大全 全面的介绍springbean各种操作原理
Spring Bean创建初始化流程
spring bean 的生命周期,把运行结果的日志,用sublime打开对比查看,你会有比较清晰的认识
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...
JavaEE spring半自动bean管理事务案例
spring bean 属性总结
Spring的Bean配置Spring的Bean配置说明说明
bean文件 springbean文件
Spring IOC和DI概述,Bean的配置形式,IOC容器BeanFactory和ApplicationContext概述,依赖注入的方式,属性注入,构造器注入等案例
使用@Transactional注解时,可以通过参数配置事务详情: 5.2.2 基于Annotation方式的声明式事务 * * * * * * * * 声明式事务管理 如何实现Spring的声明式事务管理? 5.2 声明式事务管理 Spring的声明式事务管理可以...
(三) XML文件形式配置Spring事务管理 37 四、 HibernateTemplate 38 (一) HibernateTemplate 38 (二) HibernateDaoSupport 39 第十一课:Spring整合-SSH 40 一、 第一步:加入jar包(需要的jar包列表) 40 二、 第二步...
Spring Bean 加载顺序 实验小例子
Hibernate: 第一课:第一个hibernate项目 第二课:测试实体对象的生命周期 第三课:hibernate基本映射 第四课:hibernate多对一关联映射 ...................... ...第五课:spring对AOP的只是(采用配置文件的方式)
第9章:介绍了Spring事务管理的工作机制,通过XML、注解等方式进行事务管理配置,同时还讲解了JTA事务配置知识。 第10章:对实际应用中Spring事务管理各种疑难问题进行透彻的剖析,让读者对Spring事务管理不再有...
Spring2.5提供了更灵活的配置方法, 本文档详细介绍了Spring2.x通过XML文件和Annotation如何配置Spring bean,事务管理配置,AOP的详细配置,以及其他Spring所提供支持的配置。