Spring配置Hibernate事务的三种方式
2016-03-31 20:22
567 查看
Spring配置Hibernate事务的三种方式:
使用事务代理工厂生成事务对象
使用AOP生成事务
使用注解生成事务
方法一:使用事务代理工厂生成事务对象
XML配置:
UserServiceImpl服务层:
测试类
方法二:使用AOP生成事务
XML配置:
UserServiceImpl服务层
测试类
方法三:使用注解生成事务
XML配置:
UserServiceImpl服务层
测试类
使用事务代理工厂生成事务对象
使用AOP生成事务
使用注解生成事务
方法一:使用事务代理工厂生成事务对象
XML配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd"> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="userServiceImpl" class="www.change.tm.springblank.service.impl.UserServiceImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"></property> </bean> <!--********************** 下面为事务配置 ********************** --> <!-- 配置Hibernate事务管理器 --> <bean id="tx" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 事务的工厂bean --> <bean id="proxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <!-- 指定对哪些接口生成代理 --> <property name="proxyInterfaces"> <list> <value>www.change.tm.springblank.service.UserService</value> </list> </property> <!-- 指定事务管理器 --> <property name="transactionManager" ref="tx"/> <!-- 指定目标对象 --> <property name="target" ref="userServiceImpl"/> <!-- 指定哪些方法开启事务 --> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> </beans>
UserServiceImpl服务层:
public class UserServiceImpl implements UserService{ private HibernateTemplate hibernateTemplate; public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } public UserServiceImpl() { System.out.println("初始化"); } @Override public void save() { hibernateTemplate.save(new User()); System.out.println("save"); } }
测试类
public class UserServiceTest { @Test public void saveTest(){ ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spr*.xml"); //注意 : getBean() 中,获取的id为proxy,事务的代理工厂 UserService userDao = applicationContext.getBean("proxy", UserService.class); userDao.save(); applicationContext.close(); } }
方法二:使用AOP生成事务
XML配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd"> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="userServiceImpl" class="www.change.tm.springblank.service.impl.UserServiceImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"></property> </bean> <!--********************** 下面为事务配置 ********************** --> <!-- 配置Hibernate事务管理器 --> <bean id="tx" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 事务通知 --> <tx:advice id="txAdvice" transaction-manager="tx"> <tx:attributes> <!-- 适配所有的save..方法 --> <tx:method name="save*" propagation="REQUIRED" isolation="DEFAULT"/> <!-- 适配所有的get..方法,同时为只读模式(read-only) --> <tx:method name="get*" propagation="REQUIRED" isolation="DEFAULT" read-only="true"/> </tx:attributes> </tx:advice> <!-- aop配置 --> <aop:config> <!-- 指定哪些类方法开启事务 --> <!-- advice-ref : 指定切面通知 --> <aop:advisor pointcut="execution(* *..*Service.*(..))" advice-ref="txAdvice"/> </aop:config> </beans>
UserServiceImpl服务层
public class UserServiceImpl implements UserService{ private HibernateTemplate hibernateTemplate; public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } public UserServiceImpl() { System.out.println("初始化"); } @Override public void save() { hibernateTemplate.save(new User()); } }
测试类
public class UserServiceTest { @Test public void saveTest(){ ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spr*.xml"); UserService userDao = applicationContext.getBean("userServiceImpl", UserService.class); userDao.save(); applicationContext.close(); } }
方法三:使用注解生成事务
XML配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd"> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="userServiceImpl" class="www.change.tm.springblank.service.impl.UserServiceImpl"> <property name="hibernateTemplate" ref="hibernateTemplate"></property> </bean> <!--********************** 下面为事务配置 ********************** --> <!-- 配置Hibernate事务管理器 --> <bean id="tx" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 注解驱动的事务管理 , 需要指明事务管理器transaction-manager --> <tx:annotation-driven transaction-manager="tx" /> </beans>
UserServiceImpl服务层
@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT) public class UserServiceImpl implements UserService{ private HibernateTemplate hibernateTemplate; public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } public UserServiceImpl() { System.out.println("初始化"); } @Override @Transactional(readOnly = false) public void save() { hibernateTemplate.save(new User()); } }
测试类
public class UserServiceTest { @Test public void saveTest(){ ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spr*.xml"); UserService userDao = applicationContext.getBean("userServiceImpl", UserService.class); userDao.save(); applicationContext.close(); } }
相关文章推荐
- eclipse 中文注释的乱码问题解决方案
- java学习笔记-面向对象(三)
- Java中的文件读写字节流,字符流
- 20145239 《Java程序设计》第5周学习总结
- 【LeetCode从零单排(Java)】No1.Two Sum
- 用递归算法实现斐波那契数列显示(Java)
- Java中的文件操作和对象的序列化
- 基于java的后台截图功能的实现
- LocalCache本地缓存分享
- LocalCache本地缓存分享
- Spring 如何注入值到静态变量
- mac os升级为 Yosemite 10.10 后不能创建javaproject
- Spring Bean生命周期
- 20145305 《Java程序设计》第5周学习总结
- 为eclipse的lib文件夹中的jar包关联源码说明
- 为eclipse的lib文件夹中的jar包关联源码说明
- Swing组件的构造函数
- Eclipse快捷键要在英文输入法状态下
- 丢手帕问题(环形链表)---Java 待优化
- java反射机制