- 浏览: 500902 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
来这里学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 3555首先来看一个非常简单 ... -
TestNG系列1:TestNG简介及插件
2008-04-18 22:19 6383一、什么是TestNG 引用TestNG是根据JUnit 和 ... -
用jdbcTempate调用存储过程,处理BLOB/CLOB小记
2007-11-06 00:20 91101、利用spring的jdbcTemplate调用存储过程 假 ... -
怎样利用spring简单地发送邮件
2007-11-03 16:45 3839SMTP:简单邮件传输协议,用于发送电子邮件的传输协议. PO ... -
搜索篇:Struts、Lucene的Web实例
2007-01-15 23:10 7969代码是网上下载的,有兴趣的可以看一下 这里用到的Lucene是 ... -
Stripes 快速入门指南[翻译]
2006-12-27 18:56 10496说明:这是Stripes文档中的一篇叫Quick Start ... -
搜索篇:lucene简单实例<二>
2006-12-20 23:09 10738写文章的时候,感觉比较难写的就是标题,有时候不知道起什么名字好 ... -
搜索篇:lucene简单实例<二>
2006-12-20 23:00 123写文章的时候,感觉比较难写的就是标题,有时候不知道起什么名字好 ... -
搜索篇:lucene的简单实例<一>
2006-12-19 20:12 13484说明一下,这一篇文章的用到的lucene,是用2.0版本的,主 ... -
一个比较完整的ANT实例
2006-12-19 19:41 8391Ant是一种专为java量身订做的构建工具,基础已经了java ... -
对struts2的的一些不满
2006-11-12 01:06 3003个人对struts2的一些不满的地方 1、基本大部分全抄web ... -
从webwork2.2.4迁移到struts2
2006-11-12 00:47 2612注:(originally posted on the Web ... -
webwork2.2到struts2的变化
2006-11-12 00:44 2218While Struts 2 started with the ... -
反思spring:由Ruby on Rails想到的
2006-10-23 09:33 3282[size=11] 众所周知,RoR里面的指导原则有: 第 ... -
关于jboss,weblogic的配置
2006-05-26 22:28 3482###################以下是jboss的配置# ... -
[转载] 无所不能的“蚂蚁”--Ant
2006-06-05 23:27 3863说他无所不能,好像有点夸张,但是用过Ant之后,感觉真的是只有 ... -
Hibernate, Java 5 and DAO[转]
2006-08-04 17:54 2498... -
研究一下springside的核心部分源代码
2006-09-15 19:47 7051这两天,有一些时间,研究一下springside的源代码,结 ...
相关推荐
在实际开发中,我们可以使用Eclipse的Spring插件来简化Bean配置的创建和管理,同时结合Maven来构建和运行Spring应用。 通过以上内容,你应该对Spring框架中的Bean XML配置有了初步的理解。掌握这些知识点后,你将...
在Spring框架中,Bean的配置与管理是其核心功能之一,而通过`PropertyPlaceholderConfigurer`进行属性占位符的配置则是实现动态配置的关键技术。本文将深入解析如何利用`PropertyPlaceholderConfigurer`进行bean配置...
- **实例化**:Spring通过`Class.forName()`或`new`关键字实例化Bean。如果在XML配置中指定了`class`属性,Spring将根据该属性创建Bean。 - **属性注入**:Spring会将依赖注入到Bean中,包括值注入(value,ref)...
在"spring声明式事务管理配置方式"中,主要涉及到以下几个关键知识点: 1. **Spring事务管理器(Transaction Manager)**: - Spring支持多种事务管理器,如DataSourceTransactionManager(用于JDBC事务)和...
在Spring中,Bean的管理包含多个方面:创建Bean实例、配置Bean属性、控制Bean的生命周期以及Bean作用域的定义。接下来将详细解释这些知识点。 1. Spring的工厂类: Spring通过工厂模式设计了一系列工厂类来创建对象...
Spring 声明式事务管理是Spring框架中的一个重要特性,它允许开发者在不编写任何事务管理代码的情况下,通过配置来管理事务。这种方式极大地简化了事务处理,并提高了代码的可维护性。以下是关于Spring声明式事务...
声明式事务管理是一种简化事务管理的方式,它允许开发人员通过配置而非编程来指定事务边界,从而减少了代码的复杂性并提高了可维护性。 ### 标题解读:Spring声明式事务配置 Spring框架提供了两种主要类型的事务...
Spring框架是Java开发中不可或缺的一部分,它以其控制反转(IoC)和依赖注入(DI)的核心特性,极大地简化了应用程序的构建与管理。在本文中,我们将深入探讨Spring中的Bean配置,包括IoC和DI的概念,Bean的配置方式...
在`doCreateBean()`方法中,Spring会创建Bean的实例,`createBeanInstance(beanName, mbd, args)`执行Bean实例的创建,而`populateBean(beanName, mbd, instanceWrapper)`则负责填充Bean的属性,将依赖注入到Bean中...
Spring的`<beans>`和`<bean>`元素及其属性提供了强大的配置能力,使开发者能够灵活地定义、配置和管理应用程序中的组件。通过深入了解这些元素和属性,开发人员可以更有效地利用Spring框架的功能,构建更加健壮和可...
本篇文章将深入探讨如何在Spring中配置JTA事务管理,以实现跨数据库和资源的事务一致性。 首先,让我们了解JTA的基本概念。JTA是一个规范,它定义了接口和API,使得应用程序可以控制跨越多个数据存储(如数据库、...
首先,我们需要理解Spring事务管理的两种基本模式:编程式事务管理和声明式事务管理。编程式事务管理需要在代码中显式调用开始、提交、回滚等事务操作,而声明式事务管理则通过在XML或注解中声明事务边界,让Spring...
在Spring框架中,事务管理是核心功能之一,它确保了数据的一致性和完整性。这篇"Spring学习笔记(18)-...这篇笔记详细阐述了Spring配置文件实现事务管理的方法,是初学者和进阶者理解Spring事务管理机制的重要参考资料。
#### 一、Spring事务管理概述 Spring框架为开发者提供了一套强大的事务管理机制,它简化了应用程序中的事务控制逻辑,使得开发人员能够更加专注于业务逻辑的编写,而不是繁琐的事务管理代码。Spring支持两种类型的...
### Spring事务配置的五种方式详解 #### 一、引言 在企业级应用开发中,事务处理是非常重要的一部分,特别是在涉及多个数据库操作时。Spring框架提供了强大的事务管理功能,支持编程式和声明式两种事务处理方式。...
实验 "Spring 声明事务" 是 Java 高级编程中的一个重要环节,旨在让学生掌握 Spring 框架中声明式事务管理的配置和使用。在实际应用中,事务管理是确保数据一致性、完整性和可靠性的关键组件。Spring 提供了声明式...
Spring事务管理还支持编程式事务管理,但这需要开发者手动调用`TransactionTemplate`或`PlatformTransactionManager`来控制事务的开始、提交、回滚等操作,相对而言更复杂,但在某些特定场景下更有灵活性。...
- `<import>`元素:用于引入其他配置文件,便于模块化管理配置信息。 #### 四、Spring配置约束详解 - **约束条件**:Spring框架通过在配置文件中使用特定的元素和属性来定义约束条件。例如,可以使用`<context:...
- 核心容器(Core Container):包括Spring的核心模块,它为其他模块建立试基础,如BeanFactory,它是一种工厂模式的实现,用于管理Java对象的创建和配置。 - Spring表达式语言(SPEL,Spring Expression Language)...
这种方式使用了 Spring 的 AOP 机制,通过定义一个事务 Advice,可以将事务管理器注入到 Bean 中。这种方式的优点是可以简化配置文件,但是缺点是需要了解 AOP 的机制和实现。 第三种方式:使用代理工厂 这种方式...