配置xml方式

David 2022-11-28 17:00:51
Categories: Tags:

 

 

使用AspectJ AOP + <tx:advice>

使用AspectJaop用切点表达式匹配批量注册bean代理,tx注册事务管理器代理

示例

<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" read-only="false"/>

  </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>

 

 

直接在事务代理中添加属性

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

 

  1. 配置事务代理(TransactionProxyFactoryBean

两种配置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>

 

<!-- 配置DAO -->

<bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">

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

 

 

 

使用事务拦截器批量处理相同事务属性的事务代理

 

  1. 创建事务管理器和XXXSessionFactory

 

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