上一篇咱們瞭解到spring的事務的體系。這裏咱們將結合上篇講spring事務的配置spring
<bean id="proxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <!-- 爲事務代理工廠Bean注入事務管理器 --> <property name="transactionManager" ref="transactionManager" /> <!-- 要在哪一個Bean上面建立事務代理對象 --> <property name="target" ref="productDao" /> <!-- 指定事務屬性 --> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean>
案例分析(上面有三大配置):express
有了以上2個元素,咱們就能夠建立出一個事務攔截器TransactionInterceptorspa
TransactionProxyFactoryBean這個工廠bean建立代理對象的原理就是:經過ProxyFactory來對target建立出代理對象了,同時加入上述事務攔截器,就能夠實現事務攔截功能了代理
使用TransactionProxyFactoryBean的方式只能針對一個target進行代理,若是想再代理一個target,就須要再配置一個TransactionProxyFactoryBean,比較麻煩,因此使用apo:config的配置形式,就能夠針對符合Pointcut的全部target均可以進行代理。code
配置案例以下:xml
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="add*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="pointcut" expression="XXXX" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut" /> </aop:config>
案例分析(上面有兩大配置):對象
使用aop:config能夠在xml中進行代理的配置,有時候想在代碼中直接進行配置,這時候就須要使用註解@Transactional。blog
案例以下(xml中啓動@Transactional註解掃描):事務
<!-- 開啓註解事務管理 --> <tx:annotation-driven transaction-manager="txManager" />
這樣在代碼中就能夠經過配置@Transactional來實現事務攔截了get
在xml配置中啓動註解掃描,會把那些加入了@Transactional標記的容器bean建立出代理對象,同時加入事務攔截器。在執行事務攔截的時候,會從@Transactional註解中取出對應的事務配置和事務管理器配置,進而能夠執行事務的建立等操做。