标签:操作 事务配置 logs ann upd 启动 org 容器 注入
上一篇我们了解到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>
案例分析(上面有三大配置):
有了以上2个元素,我们就可以创建出一个事务拦截器TransactionInterceptor
TransactionProxyFactoryBean这个工厂bean创建代理对象的原理就是:通过ProxyFactory来对target创建出代理对象了,同时加入上述事务拦截器,就可以实现事务拦截功能了
使用TransactionProxyFactoryBean的方式只能针对一个target进行代理,如果想再代理一个target,就需要再配置一个TransactionProxyFactoryBean,比较麻烦,所以使用apo:config的配置形式,就可以针对符合Pointcut的所有target都可以进行代理。
配置案例如下:
<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。
案例如下(xml中启动@Transactional注解扫描):
<!-- 开启注解事务管理 --> <tx:annotation-driven transaction-manager="txManager" />
这样在代码中就可以通过配置@Transactional来实现事务拦截了
在xml配置中启动注解扫描,会把那些加入了@Transactional标记的容器bean创建出代理对象,同时加入事务拦截器。在执行事务拦截的时候,会从@Transactional注解中取出对应的事务配置和事务管理器配置,进而可以执行事务的创建等操作。
spring---transaction(6)---事务的配置
标签:操作 事务配置 logs ann upd 启动 org 容器 注入
原文地址:http://www.cnblogs.com/chihirotan/p/6804478.html