最近学习spring ,也做了一些例子,但是有个困惑就是,采用 spring的事务管理的时候,这样配置:
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 那些类的哪些方法参与事务 -->
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* my.idao.*.*.*(..))" />
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice" />
</aop:config>
<bean id="sessionAdvice" class="my.filter.FlexSessionInterceptor" /> <!-- 配置自动代理 -->
<bean id="beanNameAutoProxyCreator"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>formDesignerService</value>
</list>
</property>
<property name="interceptorNames">
<value>sessionAdvice</value>
</property>
</bean>
expression="execution(* my.idao.*.*.*(..)) 对于这一块的配置还是不太明白,因为 我觉得事务开启的话也是针对业务的,而不是dao,
但是我找了许多例子,几乎都是这样配置的,有些虽然是把 service的方法配置成事务,但是没有dao接口,也就是在service的方法下面把所有的操作都包含了,包括对数据库的操作,所以很困惑---到底应该是针对业务来配置 事务 ,还是 针对 dao来配置事务?
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 那些类的哪些方法参与事务 -->
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* my.idao.*.*.*(..))" />
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice" />
</aop:config>
<bean id="sessionAdvice" class="my.filter.FlexSessionInterceptor" /> <!-- 配置自动代理 -->
<bean id="beanNameAutoProxyCreator"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>formDesignerService</value>
</list>
</property>
<property name="interceptorNames">
<value>sessionAdvice</value>
</property>
</bean>
expression="execution(* my.idao.*.*.*(..)) 对于这一块的配置还是不太明白,因为 我觉得事务开启的话也是针对业务的,而不是dao,
但是我找了许多例子,几乎都是这样配置的,有些虽然是把 service的方法配置成事务,但是没有dao接口,也就是在service的方法下面把所有的操作都包含了,包括对数据库的操作,所以很困惑---到底应该是针对业务来配置 事务 ,还是 针对 dao来配置事务?
因为你的service方法中有可能调用不同的dao层的方法。