欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Spring配置事務(wù)的五種方式

 更新時(shí)間:2016年06月15日 14:22:59   投稿:lijiao  
這篇文章主要為大家詳細(xì)介紹了Spring配置事務(wù)的五種方式,感興趣的小伙伴們可以參考一下

Spring配置文件中關(guān)于事務(wù)配置總是由三個(gè)組成部分,分別是 DataSource 、TransactionManager  和 代理機(jī)制 這三部分,無論哪種配置方式,一般變化的只是代理機(jī)制這部分。

DataSource、TransactionManager這兩部分只是會根據(jù)數(shù)據(jù)訪問方式有所變化,比如使用Hibernate進(jìn)行數(shù)據(jù)訪問時(shí),DataSource實(shí)際為SessionFactory,TransactionManager的實(shí)現(xiàn)為HibernateTransactionManager。

具體如下圖:

根據(jù)代理機(jī)制的不同,總結(jié)了五種Spring事務(wù)的配置方式,配置文件如下:

第一種方式:每個(gè)Bean都有一個(gè)代理

<?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"
 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"> 
<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> 
<!-- 定義事務(wù)管理器(聲明式的事務(wù)) --> 
<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"> 
<!-- 配置事務(wù)管理器 --> 
<property name="transactionManager" ref="transactionManager" /> 
<property name="target" ref="userDaoTarget" /> 
<property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" /> 
<!-- 配置事務(wù)屬性 --> 
<property name="transactionAttributes"> 
<props> 
<prop key="*">PROPAGATION_REQUIRED</prop> 
</props> 
</property> 
</bean> 
</beans>

第二種方式:所有Bean共享一個(gè)代理基類

<?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"
 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"> 
<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> 
<!-- 定義事務(wù)管理器(聲明式的事務(wù)) --> 
<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"> 
<!-- 配置事務(wù)管理器 --> 
<property name="transactionManager" ref="transactionManager" /> 
<!-- 配置事務(wù)屬性 --> 
<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>

第三種方式:使用攔截器

<?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"
 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"> 
<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> 
<!-- 定義事務(wù)管理器(聲明式的事務(wù)) --> 
<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" /> 
<!-- 配置事務(wù)屬性 --> 
<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>

第四種方式:使用tx標(biāo)簽配置的攔截器

<?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.bluesky" /> 
<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> 
<!-- 定義事務(wù)管理器(聲明式的事務(wù)) --> 
<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>

第五種方式:全注解

<?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.bluesky" /> 
<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> 
<!-- 定義事務(wù)管理器(聲明式的事務(wù)) --> 
<bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
<property name="sessionFactory" ref="sessionFactory" /> 
</bean> 
</beans>

此時(shí)在DAO上需加上@Transactional注解,如下:

package com.mktao.spring.dao; 
import java.util.List; 
import org.hibernate.SessionFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 
import org.springframework.stereotype.Component; 
import com.bluesky.spring.domain.User; 
@Transactional
@Component("userDao") 
public class UserDaoImpl extends HibernateDaoSupport implements UserDao { 
public List<User> listUsers() { 
return this.getSession().createQuery("from User").list(); 
 } 
... 
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論