




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、spring aop之事务处理实验内容:1. spring声明式事务处理实验目的:1. 理解spring aop2. 掌握spring声明式事务处理实验步骤:1、 准备工作a) 新建一web工程,加入struts2、spring、hibernate框架能力。i. 先导入jar包user library,ii. 然后选择【myeclipse】【add spring capabilities】添加spring能力iii. 然后选择【myeclipse】【add hibernate capabilities】添加hibernate能力,把hibernate交由spring来管理iv. 修改web.x
2、ml,添加内容如下:<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.filterdispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping
3、><listener> <listener-class> org.springframework.web.context.contextloaderlistener </listener-class></listener ><context-param> <param-name>contextconfiglocation</param-name> <param-value> /web-inf/classes/applicationcontext.xml </param-value>
4、</context-param>b) 新建数据库连接,并准备好数据库表user表i. 数据库连接如下图ii. 在test数据库中创建数据库user表,该表三个字段id整型自增,username、password字符串类型。2、 在工程中创建pojo包,为user表使用反向工程生成pojo。3、 在工程中新建userdao接口及实现类userdaoimpl,代码如下:package edu.qdgxy.dao;public interface userdao public void insert();package edu.qdgxy.dao.impl;import org.hibe
5、rnate.session;import org.hibernate.sessionfactory;import edu.qdgxy.dao.userdao;import edu.qdgxy.pojo.user;public class userdaoimpl implements userdao private sessionfactory sf;public void setsf(sessionfactory sf) this.sf = sf;public void insert() session s=sf.opensession();user u=new user("yxy&
6、quot;,"yxy");u.setuserid(1);s.save(u);s.save(u);sf.close();4、 使用spring容器装配userdao bean,修改applicationcontext.xml文件如下:<?xml version="1.0" encoding="utf-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/xml
7、schema-instance"xmlns:p="/schema/p"xsi:schemalocation="/schema/beans /schema/beans/spring-beans-3.0.xsd"> <bean id="datasource" class="org.apachmons.dbcp.basicdatasour
8、ce"><property name="driverclassname" value="com.mysql.jdbc.driver"></property><property name="url" value="jdbc:mysql:/localhost:3306/test"></property><property name="username" value="root"></property
9、><property name="password" value="admin"></property></bean><bean id="sessionfactory"class="org.springframework.orm.hibernate3.localsessionfactorybean"><property name="datasource"><ref bean="datasource" /&
10、gt;</property><property name="hibernateproperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.mysqldialect</prop></props></property><property name="mappingresources"><list><value>edu/qdgxy/pojo/
11、user.hbm.xml</value></list></property></bean><bean id="userdao" class="edu.qdgxy.dao.impl.userdaoimpl"><!- 为dao bean注入sessionfactory引用 -><property name="sf"><ref local="sessionfactory" /></property></bea
12、n></beans>5、 创建测试类,测试代码如下:package test;import org.springframework.context.applicationcontext;import org.springframework.context.support.classpathxmlapplicationcontext;import edu.qdgxy.dao.userdao;public class test public static void main(string args)applicationcontext ctx=new classpathxmlap
13、plicationcontext("applicationcontext.xml");userdao userdao=(userdao)ctx.getbean("userdao",userdao.class);userdao.insert();6、 运行测试类test,如果发现出现以下错误exception in thread "main" org.springframework.beans.factory.beancreationexception: error creating bean with name 'sessio
14、nfactory' defined in class path resource applicationcontext.xml: invocation of init method failed; nested exception is org.hibernate.hibernateexception: unable to get the default bean validation factory修改方法,在applicationcontext.xml中加入如下加粗代码便可:<property name="hibernateproperties">&
15、lt;props><prop key="hibernate.dialect">org.hibernate.dialect.mysqldialect</prop><prop key="javax.persistence.validation.mode">none</prop></props></property>运行后打开user表发现插入一条记录,但是事务处理环境下,userdaoimpl中的s.save(u);s.save(u);这两句是一个整体,因为第二条语句插入失败,所以
16、将导致第一条插入的数据也被回滚,所以为工程增加事务处理。spring事务处理简介:spring提供了如下两种事务管理方式:编程式事务处理声明式事务处理:无需在java程序中书写任何事务操作代码,而是通过在xml文件中为业务组件配置事务代理。推荐采用声明式事务策略在spring 1.x中,声明式事务使用transactionproxyfactorybean来配置事务代理spring 2.x提供了tx命名空间来配置事务管理,tx命名空间下提供了<tx:advice/>元素来配置事务增强处理,一旦使用该元素配置了事务增强处理,就可直接用<aop:advisor/>元素启用自动
17、代理增加事务处理方法一:7、 为工程增加事务处理,采用spring1.x的事务处理方式。修改applicationcontext.xml,代码如下:<?xml version="1.0" encoding="utf-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/xmlschema-instance" xmlns:p="http:/www.sprin
18、/schema/p"xsi:schemalocation="/schema/beans /schema/beans/spring-beans-3.0.xsd"><bean id="datasource" class="org.apachmons.dbcp.basicdatasource"><property name="driverclassname
19、" value="com.mysql.jdbc.driver"></property><property name="url" value="jdbc:mysql:/localhost:3306/test"></property><property name="username" value="root"></property><property name="password" value=&q
20、uot;admin"></property></bean><bean id="sessionfactory"class="org.springframework.orm.hibernate3.localsessionfactorybean"><property name="datasource"><ref bean="datasource" /></property><property name="hiberna
21、teproperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.mysqldialect</prop><prop key="javax.persistence.validation.mode">none</prop></props></property><property name="mappingresources"><list>
22、<value>edu/qdgxy/pojo/user.hbm.xml</value></list></property></bean><!- 定义事务管理器,使用适用于hibernte的事务管理器 -><bean id="transactionmanager"class="org.springframework.orm.hibernate3.hibernatetransactionmanager"><!-hibernatetransactionmanager bea
23、n需要依赖注入一个sessionfactory bean的引用 -><property name="sessionfactory"><ref local="sessionfactory" /></property></bean><bean id="userdao"class="erceptor.transactionproxyfactorybean"><!-为事务代理bean
24、注入事务管理器 -><property name="transactionmanager"><ref bean="transactionmanager" /></property><!- 设置事务属性 -><property name="transactionattributes"><props><!- 所有方法,采用required的事务策略 -><prop key="*">propagation_require
25、d</prop></props></property><!- 为事务代理bean设置目标bean -><property name="target"><!- 采用嵌套bean配置目标bean -><bean class="edu.qdgxy.dao.impl.userdaoimpl"><!- 为dao bean注入sessionfactory引用 -><property name="sf"><ref local="
26、;sessionfactory" /></property></bean></property></bean></beans>重新运行测试类test,发现数据库中没有任何数据插入,说明事务回滚,所有操作都没执行。方法一改进:利用bean与bean之间的继承,可简化配置,参考课本261页代码自己完成。增加事务处理方法二:8、 为工程增加事务处理,采用spring2.x的事务处理方式。修改applicationcontext.xml,代码如下:<?xml version="1.0" encodin
27、g="utf-8"?><beans xmlns="/schema/beans" xmlns:xsi="/2001/xmlschema-instance" xmlns:aop="/schema/aop" xmlns:context="/schema/context" xmlns:tx
28、="/schema/tx" xsi:schemalocation="/schema/beans /schema/beans/spring-beans-2.5.xsd /schema/tx /schema/tx/spring-tx-2.5.xsd http:/www.springf
29、/schema/aop /schema/aop/spring-aop-2.5.xsd /schema/context /schema/context/spring-context-2.5.xsd"><bean id="datasource" class="org.apachmons.dbcp.basicdatasource"><
30、;property name="driverclassname" value="com.mysql.jdbc.driver"></property><property name="url" value="jdbc:mysql:/localhost:3306/test"></property><property name="username" value="root"></property><propert
31、y name="password" value="admin"></property></bean><bean id="sessionfactory"class="org.springframework.orm.hibernate3.localsessionfactorybean"><property name="datasource"><ref bean="datasource" /></propert
32、y><property name="hibernateproperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.mysqldialect</prop><prop key="javax.persistence.validation.mode">none</prop></props></property><property name="ma
33、ppingresources"><list><value>edu/qdgxy/pojo/user.hbm.xml</value></list></property></bean><!- 定义事务管理器,使用适用于hibernte的事务管理器 -><bean id="transactionmanager"class="org.springframework.orm.hibernate3.hibernatetransactionmanager"><!-hibernatetransactionmanager bean需要依赖注入一个sessionfactory bean的引用 -><property name="sessionfactory"><ref local="sessionfa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论