spring研究【一】

来源:互联网 发布:福师大校园网络电视 编辑:程序博客网 时间:2024/05/20 23:02

 Spring声明式事务处理
  Spring声明式事务处理也主要使用了IoC,AOP思想,提供了TransactionInterceptor拦截器和常用的代理类TransactionProxyFactoryBean,可以直接对组件进行事务代理。
  使用TransactionInterceptor的步骤:
  (1)定义数据源,事务管理类
  (2)定义事务拦截器,例如:
  <bean id = "transactionInterceptor"
  class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <property name="transactionManager">
  <ref bean="transactionManager"/></property>
  <property name="transactionAttributeSource">
  <value>com.test.UserManager.*r=PROPAGATION_REQUIRED</value>
  </property>
  </bean>
  (3)为组件声明一个代理类:ProxyFactoryBean
  <bean id="userManager"
  class="org.springframework.aop.framework.ProxyFactoryBean">
  <property name="proxyInterfaces">
  <value>com.test.UserManager</value>
  </property>
  <property name="interceptorNames">
  <list><idref local="transactionInterceptor"/></list>
  </property>
  </bean>
  使用TransactionProxyFactoryBean:
  <bean id="userManager"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager">
  <ref bean="transactionManager"/>
  </property>
  <property name="target"><ref local="userManagerTarget"/></property>
  <property name="transactionAttributes"><props>
  <prop key="insert*">PROPAGATION_REQUIRED</prop>
  <prop key="update*">PROPAGATION_REQUIRED</prop>
  <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
  </props>
  </property></bean>
  TransactionProxyFactoryBean只是为组件的事务代理,如果我们要给组件添加一些业务方面的验证等,可以使用TransactionTemplate加拦截器方式,为组件添加多个拦截器,spring AOP中提供了三类Advice,即前增强,后增强,抛出异常时的增强,可以灵活使用.



spring 中一共定义了六种事务传播属性, 如果你觉得看起来不够直观, 那么我来转贴一个满大街都有的翻译
  引用
  PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
  PROPAGATION_SUPPORTS -- 支持当前事务,如果当前没有事务,就以非事务方式执行。
  PROPAGATION_MANDATORY -- 支持当前事务,如果当前没有事务,就抛出异常。
  PROPAGATION_REQUIRES_NEW -- 新建事务,如果当前存在事务,把当前事务挂起。
  PROPAGATION_NOT_SUPPORTED -- 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
  PROPAGATION_NEVER -- 以非事务方式执行,如果当前存在事务,则抛出异常。
  PROPAGATION_NESTED -- 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
  前六个策略类似于EJB CMT,第七个(PROPAGATION_NESTED)是Spring所提供的一个特殊变量。
  它要求事务管理器或者使用JDBC 3.0 Savepoint API提供嵌套事务行为(如Spring的DataSourceTransactionManager).

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子干咳的厉害怎么办 外遇有了孩子该怎么办 有个无赖父亲怎么办 孩子之间发生争执怎么办 被打耳光后耳鸣怎么办 被打了耳鸣怎么办 打到鼻子流鼻血怎么办 一岁多宝宝有痰怎么办 一岁半咳嗽有痰怎么办 12岁说话不清楚怎么办 梦见前夫打孩子怎么办 小儿咳嗽带痰怎么办 孩子扁桃体发炎咳嗽怎么办 一岁宝宝总有痰怎么办 四岁宝宝总有痰怎么办 5岁宝宝总有痰怎么办 一岁宝宝有痰咳不出怎么办 三岁宝宝有痰咳不出怎么办 孩子不听话打她怎么办 孩子笨上学吃力怎么办 孩子学习就睡着怎么办 孩子对父母大喊大叫怎么办 老师面对熊孩子怎么办 妈妈故意打孩子怎么办 老是被妈妈打怎么办 父母老打骂孩子怎么办 后妈总是欺负我怎么办 小朋友屁股被打紫了怎么办 儿童被咬出血怎么办 小宝宝蚊子咬了怎么办 幼儿被咬了怎么办 把孩子屁股肿打紫怎么办 小孩老是咬小孩怎么办 宝宝对蚊子过敏怎么办 胳膊打红了怎么办 孩子生气摔东西怎么办 爱发脾气摔东西怎么办 宝宝生气扔东西怎么办 人流后屁股疼怎么办 生孩子后膝盖痛怎么办 怀孕初期生气了怎么办