(1)、配置sessionFactory
// 注: id="sessionFactory"中的id不能随便命名,要根据spring中jar包的setSessionFactory来命名<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
(2)、配置事务管理器transactionManager
// 注: id="transactionManager"中的id不能随便命名,要根据spring中jar包的setTransactionManager来命名
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
(3)、配置哪些类的哪些方法参与事务,即AOP的配置:
/* 注:execution(* com.tf.hibernate.dao.*.*(..))具体写法根据自己的需求来定。在这里第一个*表示参与事务的方法的返回值可有可无,第二个*表示此dao包下的所有 */类,第三个*表示dao包下 的所有类的所有方法,(..)方法中的参数可以为任意多个
<aop:config>
<aop:pointcut expression="execution(* com.tf.hibernate.dao.*.*(..))" id="transactionMethod"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionMethod"/>
</aop:config>
(4)、配置事务传播特性:
/*注:propagation="REQUIRED"表示以XXX开始的方法的事务传播特性为:如果存在一个事务,则支持当前事务;如果没有则重新开启事务,是最为常用的一种配置
*/ read-only="true"表示其他方法的事务设置为只读,这样设置可以优化系统的性能,默认为false
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<!-- read-only只读 -->
<tx:method name="*" propagation="REQUIRED" read-only="true"/>
</tx:attributes>
</tx:advice>
(5)、具体配置如下(简单的配置):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
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/aop
http://www.springframework.org/schema/aop/spring-aop-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/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 哪些类的哪些方法参与事务 -->
<aop:config>
<aop:pointcut expression="execution(* com.tf.hibernate.dao.*.*(..))" id="transactionMethod"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionMethod"/>
</aop:config>
<!-- 事务传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<!-- read-only只读 -->
<tx:method name="*" propagation="REQUIRED" read-only="true"/>
</tx:attributes>
</tx:advice>
<import resource="applicationContext-dao.xml"/>
</beans>