另外testBo在另外的xml文件里声明了:<bean id="testBo" class="com.xy.bo.TestBo">
  <property name="testDao"><ref bean="testDao"/></property>
  <!-- <property name="transactionManager"><ref bean="transactionManager"/></property> -->
</bean>

解决方案 »

  1.   

    这里有问题:
    <property name="target">
    <ref bean="testBo" />
    </property>你可以参考一下我的:
    <property name="target">
    <bean class="com.wehave.hyerp.procurement.service.CgsqdService">
    <property name="cgsqdDao">
    <ref bean="CgsqdDao"/>
    </property>
    </bean>
    </property>
      

  2.   

    为什么是这样?我看无论参考书上还是spring的指南都是像我上面的代码阿?
    我刚按照你的方法试了,还是没有用。
      

  3.   

    没有起到作用是很正常的,我曾经也遇到了相同的问题,我用了一天查资料才解决的。
    原因是,你在controller中,调用testBo的时候,用的不是TransactionProxyFactoryBean包装过的,你要生效事务,要调用testBoProxy,他会给你一个经过事务包装过的testBo事例。
    另外testBoProxy要设置成以下的方式:
    <bean id="testBoProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
      <property name="transactionManager">
          <ref bean="transactionManager" />
      </property>
      <property name="proxyTargetClass"><value>true</value></property>
       <property name="target">
          <ref bean="testBo" />
       </property>
    <property name="transactionAttributes">
    <props>
    <prop key="test*">PROPAGATION_REQUIRED</prop>
    <prop key="qurey*">PROPAGATION_REQUIRED,readOnly</prop>
    </props>
    </property>
    </bean>
      

  4.   

    楼上说的是,你并没有调用那个有事务的bean,你调的是没有事务的bean
      

  5.   

    另外你的CgsqdService是接口还是类?
      

  6.   

    果然如平衡点所说,我把代码改成这样就可以了
    原来的代码:
    <bean name="/test" class="com.xy.action.TestAction">
      <property name="testBo"><ref bean="testBo"/></property>
    </bean>
    现在的代码:
    <bean name="/test" class="com.xy.action.TestAction">
      <property name="testBo"><ref bean="testBoProxy"/></property>
    </bean>
    把testBo改成testBoProxy就可以了,多谢多谢!
      

  7.   

    很多书都是误人子弟,我也上当了很多次,现在正在努力ing...