Spring事务配置

来源:互联网 发布:大淘营复制软件 编辑:程序博客网 时间:2024/06/13 17:23

Spring配置文件中关于事务配置由3个部分组成,
DataSource,TransactionManager,代理机制
DataSource,TransactionManager这两部分只是根据数据访问有所变化。
使用Hibernate时,DataSource实际为SessionFactory,
TransactionManager的实现为HibernateTransactionManager
这里写图片描述

代理机制有所不同
1.每个Bean都有一个代理

 <bean id="sessionFactory"          class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    <property name="configLocation"   value="classpath:hibernate.cfg.xml" />    <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" /> </bean>   <!--定义事务管理器(声明式事务)--> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"> </bean>      <!-- 配置DAO -->    <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">        <property name="sessionFactory" ref="sessionFactory" />    </bean>    <bean id="userDao"          class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">             <!-- 配置事务管理器 -->          <property name="transactionManager" ref="transactionManager" />             <property name="target" ref="userDaoTarget" />          <property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" />        <!-- 配置事务属性 -->          <property name="transactionAttributes">              <props>                  <prop key="*">PROPAGATION_REQUIRED</prop>            </props>          </property>      </bean>  </beans>

2.所有bean共享一个代理机制

 <!-- 定义事务管理器(声明式的事务) -->      <bean id="transactionManager"        class="org.springframework.orm.hibernate3.HibernateTransactionManager">        <property name="sessionFactory" ref="sessionFactory" />    </bean>    <bean id="transactionBase"              class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"              lazy-init="true" abstract="true">          <!-- 配置事务管理器 -->          <property name="transactionManager" ref="transactionManager" />          <!-- 配置事务属性 -->          <property name="transactionAttributes">              <props>                  <prop key="*">PROPAGATION_REQUIRED</prop>              </props>          </property>      </bean>        <!-- 配置DAO -->    <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">        <property name="sessionFactory" ref="sessionFactory" />    </bean>    <bean id="userDao" parent="transactionBase" >          <property name="target" ref="userDaoTarget" />       </bean></beans>

3.使用拦截器

 <bean id="sessionFactory"              class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">          <property name="configLocation" value="classpath:hibernate.cfg.xml" />          <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />    </bean>      <!-- 定义事务管理器(声明式的事务) -->      <bean id="transactionManager"        class="org.springframework.orm.hibernate3.HibernateTransactionManager">        <property name="sessionFactory" ref="sessionFactory" />    </bean>     <bean id="transactionInterceptor"          class="org.springframework.transaction.interceptor.TransactionInterceptor">          <property name="transactionManager" ref="transactionManager" />          <!-- 配置事务属性 -->          <property name="transactionAttributes">              <props>                  <prop key="*">PROPAGATION_REQUIRED</prop>              </props>          </property>      </bean>    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">          <property name="beanNames">              <list>                  <value>*Dao</value>            </list>          </property>          <property name="interceptorNames">              <list>                  <value>transactionInterceptor</value>              </list>          </property>      </bean>      <!-- 配置DAO -->    <bean id="userDao" class="com.bluesky.spring.dao.UserDaoImpl">        <property name="sessionFactory" ref="sessionFactory" />    </bean></beans>

4.使用tx标签配置的拦截器

<bean id="sessionFactory"              class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">          <property name="configLocation" value="classpath:hibernate.cfg.xml" />          <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />    </bean>      <!-- 定义事务管理器(声明式的事务) -->      <bean id="transactionManager"        class="org.springframework.orm.hibernate3.HibernateTransactionManager">        <property name="sessionFactory" ref="sessionFactory" />    </bean>    <tx:advice id="txAdvice" transaction-manager="transactionManager">        <tx:attributes>            <tx:method name="*" propagation="REQUIRED" />        </tx:attributes>    </tx:advice>    <aop:config>        <aop:pointcut id="interceptorPointCuts"            expression="execution(* com.bluesky.spring.dao.*.*(..))" />        <aop:advisor advice-ref="txAdvice"            pointcut-ref="interceptorPointCuts" />            </aop:config>      </beans>

5.注解

<tx:annotation-driven transaction-manager="transactionManager"/>    <bean id="sessionFactory"              class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">          <property name="configLocation" value="classpath:hibernate.cfg.xml" />          <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />    </bean>      <!-- 定义事务管理器(声明式的事务) -->      <bean id="transactionManager"        class="org.springframework.orm.hibernate3.HibernateTransactionManager">        <property name="sessionFactory" ref="sessionFactory" />    </bean></beans>
0 0
原创粉丝点击