spring使用Annotation进行声明式事务管理

论坛 期权论坛 脚本     
匿名网站用户   2020-12-21 05:18   978   0

首先bean.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: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-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx 
           http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
 <context:annotation-config />
 <context:component-scan base-package="com.bjsxt" />

 <!-- 
  <bean id="dataSource"
  class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  
  
  <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  <property name="url" value="jdbc:mysql://localhost:3306/spring" />
  <property name="username" value="root" />
  <property name="password" value="bjsxt" />
  </bean>
 -->

 <bean
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
   <value>classpath:jdbc.properties</value>
  </property>
 </bean>

 <bean id="dataSource" destroy-method="close"
  class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName"
   value="${jdbc.driverClassName}" />
  <property name="url" value="${jdbc.url}" />
  <property name="username" value="${jdbc.username}" />
  <property name="password" value="${jdbc.password}" />
 </bean>

 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="annotatedClasses">
   <list>
    <value>com.bjsxt.model.User</value>
    <value>com.bjsxt.model.Log</value>
   </list>
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.MySQLDialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
   </props>
  </property>
 </bean>

 <bean id="txManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>
 
 <tx:annotation-driven transaction-manager="txManager"/>
 



</beans>


然后在service业务逻辑层相应的业务逻辑方法前加Annotation @Transaction 注意不要加载Dao层,因为service层可能需要多个dao操作多个表,分开进行事务处理,必然不能同步:

@Component("userService")
public class UserService {
 
 private UserDAO userDAO;
 private LogDAO logDAO;
 
 public void init() {
  System.out.println("init");
 }
 
 public User getUser(int id) {
  return null;
 }
 
 @Transactional(readOnly=true)
 public void add(User user) {
  
   userDAO.save(user);
   Log log = new Log();
   log.setMsg("a user saved!");
   logDAO.save(log);
  
 }
 public UserDAO getUserDAO() {
  return userDAO;
 }
 
 @Resource(name="u")
 public void setUserDAO( UserDAO userDAO) {
  this.userDAO = userDAO;
 }
 

 
 public LogDAO getLogDAO() {
  return logDAO;
 }
 
 @Resource
 public void setLogDAO(LogDAO logDAO) {
  this.logDAO = logDAO;
 }

 public void destroy() {
  System.out.println("destroy");
 }
}



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP