关于spring事务管理的一些疑问

[code="java"]
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">



PROPAGATION_REQUIRED,-java.lang.Exception
PROPAGATION_REQUIRED,-java.lang.Exception
PROPAGATION_REQUIRED,-java.lang.Exception
PROPAGATION_REQUIRED,-java.lang.Exception
PROPAGATION_REQUIRED,-java.lang.Exception
PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED,readOnly
PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED,readOnly
PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED,readOnly
PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED,readOnly
PROPAGATION_REQUIRED,-java.lang.Exception
PROPAGATION_SUPPORTS





[/code]

一般我们会在applicationContext.xml这样配置service,我想知道id为loginService的bean是怎样生成的?是什么类型?

从表面上看到loginService的bean好像是basicTxProxy的bean子类,不是我们希望注入的test.service.LoginService类,对此比较疑惑。
有相关资料和书籍可以介绍吗?

  1. 你使用的是比较老的配置方式, 使用TransactionProxyFactoryBean, 需要将真正的test.service.LoginService做成target放入TransactionProxyFactoryBean中.

其实, 这种配置方式已经非常老了, 现在一般使用tx:advice的配置方式, 大概如下:
可以见这个页面, 当然也可以找到很多中文的资料.
http://static.springsource.org/spring/docs/2.0.x/reference/transaction.html

[code="java"]







<!-- the transactional semantics... -->
tx:attributes
<!-- all methods starting with 'get' are read-only -->

<!-- other methods use the default transaction settings (see below) -->

/tx:attributes
/tx:advice


[/code]

[code="java"]



[/code]

  1. 先说明怎么做的parent效果. parent是配置继承,不是类继承, 也就是parent里面的所有配置等效于配置在了bean上.

等同于下面的配置:
[code="java"]

class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

<property name="transactionManager" ref="transactionManager" />
    <property name="transactionAttributes">
        <props>
            <prop key="save*">PROPAGATION_REQUIRED,-java.lang.Exception</prop>
            <prop key="add*">PROPAGATION_REQUIRED,-java.lang.Exception</prop>
            <prop key="remove*">PROPAGATION_REQUIRED,-java.lang.Exception</prop>
            <prop key="update*">PROPAGATION_REQUIRED,-java.lang.Exception</prop>
            <prop key="delete*">PROPAGATION_REQUIRED,-java.lang.Exception</prop>
            <prop key="check*">PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED,readOnly</prop>
            <prop key="get*">PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED,readOnly</prop>
            <prop key="find*">PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED,readOnly</prop>
            <prop key="query*">PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED,readOnly</prop>
            <prop key="move*">PROPAGATION_REQUIRED,-java.lang.Exception</prop>
            <prop key="*">PROPAGATION_SUPPORTS</prop>
    </props>
</property>


[/code]

这样的描述应该就比较清楚了. 也就是: loginService确实是TransactionProxyFactoryBean的一个对象, 而不是test.service.LoginService.