首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

spring事宜的5种配置方式

2012-08-24 
spring事务的5种配置方式??转载:http://sosuny.iteye.com/blog/451961Spring配置文件中关于事务配置总是由

spring事务的5种配置方式

??转载:http://sosuny.iteye.com/blog/451961

Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。

??? 根据代理机制的不同,总结了五种Spring事务的配置方式,配置文件如下:

???

第一种方式:每个Bean都有一个代理

<!----><??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?>???

????<!--?定义事务管理器(声明式的事务)?-->???
????<?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?>

??

? 第二种方式:所有Bean共享一个代理基类

<!----><??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?>???

????<!--?定义事务管理器(声明式的事务)?-->???
????<?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?>

第三种方式:使用拦截器(非常常用)

<!----><??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?>???

????<!--?定义事务管理器(声明式的事务)?-->???
????<?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?>

第四种方式:使用tx标签配置的拦截器(常用)

<!----><??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?>???

????<!--?定义事务管理器(声明式的事务)?-->???
????<?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?>???

????<!--?定义事务管理器(声明式的事务)?-->???
????<?bean?id?="transactionManager"?
??????? class?="org.springframework.orm.hibernate3.HibernateTransactionManager"?>?
????????<?property?name?="sessionFactory"?ref?="sessionFactory"???/>?
????</?bean?>?
????
</?beans?>

此时在DAO上需加上@Transactional注解,如下:

<!---->package?com.bluesky.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();
??? }
????
????spring事宜的5种配置方式
}

?

热点排行